【问题标题】:Find matching type for one of multiple joined tables查找多个连接表之一的匹配类型
【发布时间】:2014-08-25 05:38:06
【问题描述】:

我有几张桌子。

table_0

id | id_table_1 |id_table_2 | people_id
1        1           0        1
2        0           2        1
3        0           0        1
4        0           1        2

table_1

 id | machine| type
   1    bmw      1
   2    reno     1
     ....

table_2

  id | machine |type
   1   yamaha     2
   2   ducati     3 
   ....

table_3(类型)

      id | name
      1    auto
      2    bike
      3    sportbike
      ....

我想做一个可以得到这个结果的选择查询

tabel_0.id | table_0.people_id  | machine(table_1 or table_2) |  type
    1                1                      bmw                  auto
    2                1                      ducati               sportbike
    3                1                       ""                    ""

上次我问过这个问题,但没有行类型,现在我有这个代码

    SELECT table_0.id, table_0.people_id, 
       IFNULL(table_1.machine, table_2.machine) AS machine
FROM table_0 
LEFT JOIN table_1 ON table_0.id_table_1 = table_1.id 
LEFT JOIN table_2 ON table_0.id_table_2 = table_2.id
WHERE table_0.people_id = 1

请帮助解决我的问题。谢谢!

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以让 table_1table_2 的连接输入工作:

    select  t0.id
    ,       t0.people_id
    ,       coalesce(t1.machine, t2.machine) as machine
    ,       t3.name as type
    from    table_0 t0
    left join
            table_1 t1
    on      t0.id_table_1 = t1.id
    left join
            table_2 t2
    on      t0.id_table_2 = t2.id
    left join
            table_3 t3
    on      t3.id in (t1.type, t2.type)
    

    您可以通过为表格提供实名而不是 table_1table_2 来改进您的设计。

    【讨论】:

      【解决方案2】:

      试试这个:

      SELECT table_0.id, table_0.people_id, table_1.machine, table_2.machine , table_3.type
      FROM table_0 
         JOIN table_1 ON table_0.id_table_1 = table_1.id 
         JOIN table_2 ON table_0.id_table_2 = table_2.id
         JOIN table_3 ON table_2.type = table_3.id
      WHERE table_0.people_id = 1
      

      【讨论】:

      • 您只是在表 2 中查找行的类型。对表 1 和表 2 使用内部联接肯定无法返回任何行
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      相关资源
      最近更新 更多