我尝试从table1查询多个ids,如果来自table1的id存在于table2中,则获取它所在的行,如果来自table2的id存在于table3中,则执行相同的操作。
我期待下面的结果;
-----------------------------------------------------------------
| table1 | table2 | table3 |
-----------------------------------------------------------------
id specific_column | id table1_id | id table2_id
1 4457 1 1 1 1
8 8477 6 8 2 6
25 8339 3 25 54 3
-----------------------------------------------------------------我尝试在查询中使用IN,但只得到了一行
SELECT * FROM table1, table2, table3
WHERE (table1.specific_column)
IN (4457, 8477, 8339)
AND table2.table1_id = table1.id
AND table3.table2_id = table2.ID目前的结果是;
-----------------------------------------------------------------
| table1 | table2 | table3 |
-----------------------------------------------------------------
id specific_column | id table1_id | id table2_id
1 4457 1 1 1 1
-----------------------------------------------------------------发布于 2021-07-19 18:42:17
最好使用更清晰的JOIN语法重写:
SELECT *
FROM table1 t1
LEFT JOIN table2 t2 ON t2.table1_id = t1.id
LEFT JOIN table3 t3 ON t3.table2_id = t2.id
WHERE t1.specific_column IN (4457, 8477, 8339)现有查询的问题是它使用了一个INNER JOIN,这意味着只显示所有三个表中具有匹配结果的行。
使用LEFT JOIN将返回来自左侧表的所有结果和来自右侧表的匹配结果(因此在JOIN失败的地方显示NULL值)。
https://stackoverflow.com/questions/68439061
复制相似问题