我有三個表格在以下形式。問題與查詢。尋找一個優雅的方法來解決它
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經驗。我很樂意提供任何幫助或提示。
我有三個表格在以下形式。問題與查詢。尋找一個優雅的方法來解決它
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經驗。我很樂意提供任何幫助或提示。
未經測試工作,但我覺得像下面應該工作。
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
你可能會尋找沿着線的東西: (假設表格中的數字稱爲「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