SQL查询匹配未链接的数据

时间:2013-11-28 10:32:07

标签: mysql sql

说我有三张桌子:

TABLE A

idA     variable
1       Number of hats
2       Number of scarves
3       Number of mittens


TABLE B

idB     name
1       Andy
2       Betty
3       Cedric
4       Daphne


TABLE C

idA     idB     value
1       1       15
1       2       2
1       3       89
2       1       10
2       3       3
2       4       1504
3       2       12
3       3       4
3       4       1

看看桌子,锻炼起来相对简单 - 我们知道她拥有多少帽子(2)和连指手套(12),但不知道有多少条围巾。同样地,对于达芙妮,我们知道她拥有多少条围巾(1504)和连指手套(1),但不知道帽子的数量。

但是,我想要一个没有信息的字段列表 - 我会得到这样的返回结果(如果我要求安迪)

idA     variable
3       Number of mittens

知道我是怎么做到的吗? :)

3 个答案:

答案 0 :(得分:1)

您可以使用联接来关联2个表。

在你的情况下,如果你要求安迪并且你想知道连指手套的数量,你将会:

SELECT name, value 
FROM B
INNER JOIN C on B.idB = C.idB
WHERE id.A = 3

回复你的评论,你会尝试类似的东西:

SELECT name, variable
FROM B
RIGHT JOIN C on B.idB = C.idB
RIGHT JOIN A on C.idA = A.idA
WHERE C.idA IS NULL

答案 1 :(得分:1)

以下查询有效:

SELECT B.name, A.variable
FROM B
CROSS JOIN A
LEFT JOIN C ON C.idA = A.idA AND C.idB = B.idB
WHERE C.value IS NULL

CROSS JOIN是关键,它JOIN BA的每条记录idA。完成后,您可以轻松检查idBC的哪些组合在NAME UNKNOWN VARIABLE ------------------------------- Andy Number of mittens Betty Number of scarves Daphne Number of hats 中没有相应的记录。

Tested on SQLFiddle

<强>结果:

{{1}}

答案 2 :(得分:0)

select idA, variable
from a
where idA not in (select idA from c where idB = 1)