2011-08-23 42 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 
相关问题