2013-11-28 79 views
0

說我有三個表: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 

任何想法如何我去做? :)

回答

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這是關鍵,它說JOINB中的每條記錄都在A中的每條記錄。完成之後,您可以輕鬆檢查idAidB的哪些組合在C中沒有對應的記錄。

Tested on SQLFiddle

結果:

NAME  UNKNOWN VARIABLE 
------------------------------- 
Andy  Number of mittens 
Betty  Number of scarves 
Daphne  Number of hats 
+0

在自己解決這個問題之前,我在同一個SQLFiddle上測試了其他所有答案,但都沒有成功。 – OGHaza

+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 
+0

感謝您的回覆:)但是我不想知道手套的數量 - 我想知道,我*不*知道Andy的連指手套數量(或者更準確地說,我不知道Andy的一些事情) –

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