说我有三张桌子:
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
知道我是怎么做到的吗? :)
答案 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
B
中A
的每条记录idA
。完成后,您可以轻松检查idB
和C
的哪些组合在NAME UNKNOWN VARIABLE
-------------------------------
Andy Number of mittens
Betty Number of scarves
Daphne Number of hats
中没有相应的记录。
<强>结果:强>
{{1}}
答案 2 :(得分:0)
select idA, variable
from a
where idA not in (select idA from c where idB = 1)