【问题标题】:Need a mysql query recommendation需要一个mysql查询推荐
【发布时间】:2014-12-24 11:43:20
【问题描述】:

假设这是可能的,我正在寻找一种方法(MYSQL 查询)来连接所有返回的值都不重复的表。我想加入三个表(A、B、C)。这三个表的共同列是 user_id。 user_id 在表 A 中是唯一的 - 用户在表 A 中只有一行/记录。但是,user_id 在表 B 和 C 中不是唯一的 - 用户在表 B 和 C 中可能有多个记录/行。已经尝试过 INNER、LEFT 和 RIGHT JOINS 以及 UNION 但是,它复制了表 A 中的结果以匹配表 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)

提前感谢您的帮助。

【问题讨论】:

  • 这是意料之中的。您遇到的是显示问题,而不是查询问题。
  • 为您的问题提供答案的一个问题是可能需要的列数不确定。您是否知道是否可以提前知道表 B 和 C 中任意用户的行数是否受到合理限制?
  • Joe,我希望我能理解您的问题:用户在表 B 和 C 中可能拥有的行数不应超过 10 或 20 行。用户将在表 B 中列出他们的教育(学校、就读年限和获得的学位)。他们将在表 C 中列出他们的工作经历(类似于简历样式)。

标签: php mysql join


【解决方案1】:

如果您的主要兴趣是让每一行返回 B 和 C 中的所有其他值,并且您不关心列数,那么以下内容可能有用:

SELECT A.F1, GROUP_CONCAT(B.F1) AS all_b_F1, GROUP_CONCAT(C.F1) AS all_c_F1 FROM A 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 中的每个值都有自己的单元格.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多