需要一个mysql查询推荐

时间:2014-10-28 21:42:51

标签: php mysql join

假设这是可能的,我正在寻找一种方法(MYSQL查询)来连接没有返回任何值的表。我想加入三个表(A,B,C)。三个表中的公共列是user_id。 user_id在表A中是唯一的 - 用户在表A中将只有一行/记录。但是,表B和表中的​​user_id将不是唯一的。 C - 用户可能在表B和B中都有几个记录/行。 C.我尝试过INNER,LEFT和RIGHT JOINS,以及UNION但是,它重复了表A的结果,以便与表B和表B的结果相匹配。 C.

Row 1:    Value1(from A)        Value1(from B)        Value1(from C)
Row 2:    Value1(from A)        Value2(from B)        Value2(from C)  
Row 3:    Value1(from A)        Value3(from B)        Value3(from C)

我想避免这种情况。相反,我更喜欢:

Row 1:    Value1(from A)        Value1(from B)        Value1(from C)
                                Value2(from B)        Value2(from C)  
                                Value3(from B)        Value3(from C)
Row 2:    Value2(from A)        Value1(from B)        Value1(from C)
                                Value2(from B)        Value2(from C)  
                                Value3(from B)        Value3(from C)

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果您的主要兴趣在于让每一行都返回B和C中的所有其他值,并且您没有对列数进行讨论,那么以下内容可能会有用:

SELECT A.F1,GROUP_CONCAT(B.F1)AS all_b_F1,GROUP_CONCAT(C.F1)AS all_c_F1 FROM INNER JOIN B USING(user_id)INNER JOIN C USING(user_id)ORDER BY A.F1;

请注意,由于您没有指定字段名称,因此我编写了字段名称。您可以为B和C中的其他字段添加其他GROUP_CONCAT列,或者将它们替换为CONCAT或CONCAT_WS,以代替当前查询中的B.F1。

根据您要对结果执行的操作,此查询可能已经足够好了。例如,您可以在PHP中爆炸all_b_F1以获取单独的值,或者使用FIELDS ENCLOSED BY''将查询结果从MySQL导出到csv。这样当csv导入Excel时,B和C中的每个值都会得到自己的单元格。