假设这是可能的,我正在寻找一种方法(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)
提前感谢您的帮助。
答案 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中的每个值都会得到自己的单元格。