gpt4 book ai didi

mysql - 将表 1 中的一列左连接到表 2 中的两列

转载 作者:行者123 更新时间:2023-11-29 00:40:55 25 4
gpt4 key购买 nike

我有两张表,一张是“电话号码”表,另一张是“电话”表。调用表有两列感兴趣:始发号码列 (c.orig) 和终止号码列 (c.term)。

我正在尝试编写一个 MySQL 查询,它将返回 call 表中的所有记录,其中 NEITHER c.orig 编号或 c.term 编号存在于 numbers 表中(“n .nu​​m"列在数字表中)。

这是我的 SQL 查询:

    SELECT
c.id, c.date, c.orig, c.term, c.duration
FROM calls as c
LEFT JOIN numbers as n ON (n.num = c.orig AND n.num = c.term)
WHERE
c.period = '2012-08' AND
n.num IS NULL
GROUP BY c.call_id
ORDER BY c.call_id
LIMIT 0,300

有什么想法吗?


这里有一些进一步的说明:

------------------------------
table: numbers
nid num
1 111-222-3333
2 222-333-4444
3 333-444-5555
------------------------------

------------------------------
table: calls
id orig term
1 333-444-5555 999-999-9999
2 999-999-9999 111-222-3333
3 222-333-4444 999-999-9999
4 888-888-8888 999-999-9999
5 777-777-7777 999-999-9999
------------------------------

调用 ID 1、2 和 3 至少具有可在号码表中找到的两个号码(orig 或 term)之一。

调用 ID 4 和 5 是两个电话号码都不在号码表中的情况。这些是我要查找的记录。在号码表中没有找到电话号码的记录。

最佳答案

为此,您应该 加入两次

SELECT
c.id, c.date, c.orig, c.term, c.duration
FROM calls as c
LEFT JOIN numbers as n
ON (n.num = c.orig)
LEFT JOIN numbers m
ON m.num = c.term
WHERE
c.period = 'date here' AND
m.num IS NULL
-- GROUP BY c.call_id
ORDER BY c.call_id
LIMIT 0,300

问题,我删除了您的组子句,因为我没有看到任何聚合函数。你还想做什么?

更新 1

根据你上面的例子,试试这个编辑过的。

Call IDs 4 and 5 are situations where neither of the two phone numbers are not in the numbers table. Those are the records that I'm trying to find. Records where neither phone number is found in the numbers

SELECT  a.*
FROM calls a
LEFT JOIN numbers b
ON a.orig = b.num
LEFT JOIN numbers c
ON a.term = c.num
WHERE b.num IS NULL AND
c.num IS NULL

SQLFiddle Demo

希望这是有道理的。

关于mysql - 将表 1 中的一列左连接到表 2 中的两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12327305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com