mysql - 查找多个连接表之一的匹配类型

标签 mysql sql

我有几张 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

表_1

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

表_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

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

最佳答案

您可以使 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 来改进您的设计。

关于mysql - 查找多个连接表之一的匹配类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25479594/

相关文章:

javascript - 将 MYSQL 结果集从 JSP 转换为 Javascript 数组

php - 从数据库中检索行以获取建议

java - 需要帮助在java控制台中显示mysql表

MySQL JOIN 查询 -

sql - 可视化三个表的内连接

mysql - 使用一行从另一个表中选择两行

php - 使用php将日期时间保存在mysql中

sql - System.Data.SqlClient 和 SQLNCLI10.1 提供程序之间有什么区别?

mysql - 将表与其自身连接并根据子查询进行过滤

php - 如何从数据库中提取具有特定日期的数据