【问题标题】:using JOINS to concatenate user's data from multiple tables MySQL使用 JOINS 连接来自多个表 MySQL 的用户数据
【发布时间】:2014-01-23 17:41:01
【问题描述】:

我需要将多个表中的数据导出到 .csv 文件中。我已经编写了 CSV 输出代码,但现在我需要正确地构造查询。

每个表都包含一个USER_ID 字段。该字段用于将用户数据从一个表关联到另一个表。我需要从这些表中获取所有数据,并将每个用户的信息完全显示在一行中。

我需要的简单示例:

TABLE A
|USER ID | NAME | FAVORITE_COLOR | AGE |
|007     |James | black          | 46  |
----------------------------------------

TABLE B
|USER ID | JOB | LOCATION | NOTES    |
|007     |Agent| N/A      | cool guy | 
--------------------------------------


JOINED OUTPUT I NEED (albeit with many more users / tables):
|USER ID | NAME | FAVORITE_COLOR | AGE | JOB | LOCATION | NOTES    |
|007     |James | black          | 46  |Agent| N/A      | cool guy |
--------------------------------------------------------------------

我知道这可以通过joins 完成,但我不确定如何进行查询以选择所有用户,并从多个表中连接他们的所有数据,以便每个用户都是一行,其中包含所有用户数据。

感谢您向正确方向提供任何帮助或代码推动! :)

【问题讨论】:

    标签: php mysql sql join left-join


    【解决方案1】:

    试试这个

     select t1.USER ID , NAME , FAVORITE_COLOR , AGE ,JOB , LOCATION , NOTES 
     from TABLE1 t1 
     INNER JOIN table2 t2  
     ON t1.USER_ID = t2.USER_ID
    

    编辑>

    如果你有 3 或 4 个表,那么只需加入它们,你就可以添加这个

      INNER JOIN table3 t3  
      ON t2.USER_ID = t3.USER_ID
      INNER JOIN table4 t4  
      ON t3.USER_ID = t4.USER_ID
    

    【讨论】:

    • 如果超过 2 个表,这将如何改变?
    【解决方案2】:

    试试这个查询

    select t1.*,t2.* from table_1 as t1 left join table_2 as t2 on t1.user_id = t2.user_id 
    

    【讨论】:

      【解决方案3】:

      有以下表格

      TABLE A
      |USER ID | NAME | FAVORITE_COLOR | AGE |
      |007     |James | black          | 46  |
      |008     |John  | Doe            | 77  |
      |010     |Amy   | McClain        | 26  |
      ----------------------------------------
      
      TABLE B
      |USER ID | JOB | LOCATION | NOTES    |
      |007     |Agent| N/A      | cool guy |
      |010     |Agent| MI       | babe     | 
      --------------------------------------
      
      SELECT TableA.*, TableB.*
      FROM TableA
      LEFT JOIN TableB
      ON TableA.[USER ID] = TableB.[USER ID]
      

      无论TableB 中是否有匹配记录,Will 都会提取在TableA 中找到的所有记录。结果如下所示:

      |USER ID | NAME | FAVORITE_COLOR | AGE | JOB | LOCATION | NOTES    |
      |007     |James | black          | 46  |Agent| N/A      | cool guy |
      |008     |John  | Doe            | 77  |Null | Null     | Null     |
      |010     |Amy   | McClain        | 26  |Agent| MI       | babe     |
      

      通过将LEFT JOIN 更改为INNER JOIN,您可以强制查询仅提取在两个表中都找到的记录。结果如下所示:

      |USER ID | NAME | FAVORITE_COLOR | AGE | JOB | LOCATION | NOTES    |
      |007     |James | black          | 46  |Agent| N/A      | cool guy |
      |010     |Amy   | McClain        | 26  |Agent| MI       | babe     |
      

      【讨论】:

      • 谢谢。超过 2 个表需要进行哪些更改?我正在与 3-4 合作。
      • 这取决于所需的连接类型和您正在寻找的结果。我认为您只需要更好地熟悉连接即可。 Jeff Atwood 解释加入。 Code Project 解释加入。 w3schools 连接说明。
      【解决方案4】:

      试试这个查询

      $qry = "SELECT t1.USER_ID,t1.NAME,t1.FAVORITE_COLOR,t1.AGE,t2.JOB,t2.LOCATION,t2.NOTES FROM TABLE_1 as t1 LEFT JOIN TABLE_2 as t2 ON t1.USER_ID = t2.USER_ID";
      

      【讨论】:

        猜你喜欢
        • 2017-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多