我有三个表格在以下形式。问题与查询。寻找一个优雅的方法来解决它
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