Mysql 用于匹配未链接数据的SQL查询
假设我有三张桌子:Mysql 用于匹配未链接数据的SQL查询,mysql,sql,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
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),但不知道帽子的数量
但是,我想要一个没有相关信息的字段列表——我会得到一个类似这样的返回结果(如果我要求Andy)
你知道我是怎么做到的吗?:) 可以使用联接关联两个表 在你的情况下,如果你问安迪,你想知道手套的数量,你将有:
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
可以使用联接关联两个表 在你的情况下,如果你问安迪,你想知道手套的数量,你将有:
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
可以使用联接关联两个表 在你的情况下,如果你问安迪,你想知道手套的数量,你将有:
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
可以使用联接关联两个表 在你的情况下,如果你问安迪,你想知道手套的数量,你将有:
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
以下查询工作正常:
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
以下查询工作正常:
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
以下查询工作正常:
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
以下查询工作正常:
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
谢谢你的回复:)但我不想知道手套的数量-我想知道我不知道安迪的手套数量(或者更准确地说,我不知道安迪的事情列表)谢谢你的回复:)但我不想知道手套的数量-我想知道我不知道安迪的手套数量(或者更准确地说,我不知道安迪的事情清单)谢谢你的回答:)但我不想知道手套的数量-我想知道我不知道安迪的手套数量(或者更准确地说,我不知道安迪的事情清单)谢谢你的回复:)但我不想知道手套的数量-我想知道我不知道安迪的手套数量(或者更准确地说,我不知道安迪的一系列事情)在费心自己解决这个问题之前,我在同一个SQLFiddle上测试了其他每个答案,但没有一个有效…向你致敬,先生-这正是我想要的:)在费心自己解决这个问题之前,我在同一把小提琴上测试了其他答案,但没有一个有效…向你致敬,先生-这正是我想要的:)在费心自己解决这个问题之前,我在同一把小提琴上测试了其他答案,但没有一个有效…向你致敬,先生-这正是我想要的:)在我自己费心解决这个问题之前,我用同一把SQLFiddle测试了其他答案,但没有一个有效…向你致敬,先生-这正是我想要的:)