查询问题。寻找一种优雅的方法来解决它

时间:2011-08-23 05:14:10

标签: mysql

我有以下三种表格。

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没有多少经验。我会很高兴得到任何帮助或提示。

2 个答案:

答案 0 :(得分: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相同,因此您可能需要实现CROSS JOIN使用tableB b, tableC c代替tableB b CROSS JOIN tableC c

答案 1 :(得分: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
相关问题