2011-08-23 64 views
0

我有三個表格在以下形式。問題與查詢。尋找一個優雅的方法來解決它

 
C 
1 
2 
3 
4 

B 
1 
2 
3 
4 
5 


A B C 
1 1 1 
2 1 2 
3 1 3 
4 1 4 
5 2 1 
6 2 2 
7 3 1 
8 4 1 
9 5 1 

而且想顯示所有沒有對應「C」的「B」列表。例如:

 
----------- 
|2|3,4 | 
|3|2,3,4,5| 
|4|2,3,4,5| 
|5|2,3,4,5| 
----------- 

我沒有太多的sql經驗。我很樂意提供任何幫助或提示。

回答

1

未經測試工作,但我覺得像下面應該工作。

SELECT b.B, 
     GROUP_CONCAT(c.C) AS C 
FROM tableB b 
     CROSS JOIN tableC c 
     LEFT JOIN tableABC abc ON abc.B = b.B 
            AND c.C = abc.C 
WHERE abc.B IS NULL 
GROUP BY b.B 

編輯:雖然怪異it appears彷彿MySQL已經重新定義CROSS JOIN意思一樣INNER JOIN,所以你可能需要使用tableB b, tableC c代替tableB b CROSS JOIN tableC c

實現 CROSS JOIN
0

你可能會尋找沿着線的東西: (假設表格中的數字稱爲「id」字段),以及A表(ID,B_ID,C_ID)

雖然更多的信息將是有幫助的,這可能給你一些信息與

SELECT B.id, group_concat(A.id) 
    FROM A 
    LEFT JOIN B on A.b_id = B.id 
    LEFT JOIN C on A.c_id = C.id 
    WHERE 
    A.c_id IS NULL 
    GROUP BY B.id 
相關問題