SQL如何关联与父表无直接关联关系的表获取目标数据
问题原因
你原有SQL的核心问题有两点:
- 未建立table3与table2的关联逻辑:table3的
source、target字段存储的都是table2的主键id,你需要保证这两个值都属于关联到目标table1记录的table2 id集合 - 错误使用LEFT JOIN:LEFT JOIN会保留左表(此处是table3)的所有记录,无论关联条件是否命中,自然会返回全量table3数据
正确SQL写法
写法1:子查询实现(可读性更高)
SELECT tb3.id, tb3.source, tb3.target FROM table_3 tb3 WHERE tb3.source IN (SELECT id FROM table_2 WHERE fk_table_1 = 1000) AND tb3.target IN (SELECT id FROM table_2 WHERE fk_table_1 = 1000);
写法2:多表关联实现
SELECT DISTINCT tb3.id, tb3.source, tb3.target FROM table_3 tb3 INNER JOIN table_2 t2_source ON t2_source.id = tb3.source INNER JOIN table_2 t2_target ON t2_target.id = tb3.target WHERE t2_source.fk_table_1 = 1000 AND t2_target.fk_table_1 = 1000;
如果需要适配所有table1的id、而非固定值1000,可扩展WHERE条件关联table1表即可。
内容的提问来源于stack exchange,提问作者Mike K
相关产品推荐
相关产品推荐

