【问题标题】:SQL SELECT 3 Tables With 2 Different IDsSQL SELECT 3 个具有 2 个不同 ID 的表
【发布时间】:2017-05-21 07:56:17
【问题描述】:

我正在尝试做一个 MySQL 查询来合并来自三个表的数据。不幸的是,用于组织数据的 ID 对于其中两个表是不同的,但在第三个表上是相关的。第一个表是这样设置的:

 +---------------------------------------+
 | ID | Meta_Key  | Meta_Value           |
 +---------------------------------------+
 | 1  | name      | John Doe             |                      
 +---------------------------------------+

第二张桌子是这样设置的:

 +---------------------------------------+
 | ID  | Order_Type      |  Order_ID     |
 +---------------------------------------+
 | 1   | order_type1     |  101          |
 +---------------------------------------+

第三张桌子是这样设置的:

 +---------------------------------------+
 | Order_ID  | Order_Key  | Order_Value  |
 +---------------------------------------+
 | 101       | order_total| 1000         |
 +---------------------------------------+

我正在寻找一种方法来使用 SELECT 查询合并这三个表,并按 ID 对它们进行分组,如下所示:

 +-----------------------------------------------------------+
 | ID  | Order_ID  | Meta_Value  | Order_Type  | Order_Value |
 +-----------------------------------------------------------+
 | 1   | 101       | John Doe    | order_type1 | 1000        |
 +-----------------------------------------------------------+

【问题讨论】:

  • 好像你想要一个JOIN! (双一。)
  • 我是一个SQL菜鸟,是否可以加入3个表并根据两个ID组织数据?
  • 我不确定是否可以将它们关联起来。我想也许第二张表包含第一张和第三张表的 ID 的事实可能使它成为可能。
  • @gffwebdev,是的,您可以使用任何您想要的逻辑加入任意数量的表,您只需要验证您的输出是否获得了逻辑表达式的真正肯定。跨度>

标签: mysql sql


【解决方案1】:

您可以连接所有三个表并选择您需要的字段。

SELECT 
 FirstTable.ID, 
 SecondTable.Order_ID, 
 FirstTable.Meta_Value, 
 SecondTable.Order_Type, 
 ThirdTable.Order_Value
FROM FirstTable 
JOIN SecondTable ON FirstTable.ID = SecondTable.ID 
JOIN ThirdTable ON SecondTable.Order_ID = ThirdTable.Order_ID

【讨论】:

  • 来自审核队列:我可以请求您在源代码周围添加一些上下文。仅代码的答案很难理解。如果您可以在帖子中添加更多信息,这将对提问者和未来的读者都有帮助。
【解决方案2】:

好像加入就可以了:

select t1.id,
    t2.order_id,
    t1.meta_value,
    t2.order_type,
    t3.order_value
from table1 t1
join table2 t2 on t1.id = t2.id
join table3 t2 on t2.order_id = t3.order_id
where t1.meta_key = 'name';

【讨论】:

    【解决方案3】:

    您可以根据多个条件连接多个表:

    select
    [desired fields]
    from tbl_1
         inner join tbl_2 on tbl_1.ID = tbl_2.ID
         inner join tbl_3 on tbl_2.Order_ID = tbl_3.Order_ID
    

    【讨论】:

      【解决方案4】:
      select T1.ID, T2.Order_ID, T1.Meta_Value, T2.Order_Type, T3.Order_Value 
      FROM Table_1 T1
      LEFT JOIN Table_2 T2 ON T1.ID = T2.ID
      LEFT  JOIN Table_3 T3 ON T2.Order_ID= T3.Order_ID
      

      请使用以上查询进行查看

      【讨论】:

      • 我很好奇你为什么使用视图?
      猜你喜欢
      • 2016-06-11
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多