如何从data_1和data_2表中查询名为Adam的Person的年龄?
解决方案
方法1:从Person表出发关联两张数据表格
先定位到Person表中名为Adam的记录,再分别将data_1和data_2与Person表关联(用LEFT JOIN确保不会遗漏仅存在于其中一张表的Adam记录),最后通过DISTINCT避免年龄重复输出:
SELECT DISTINCT p.age FROM Person p LEFT JOIN data_1 d1 ON p.name = d1.name LEFT JOIN data_2 d2 ON p.name = d2.name WHERE p.name = 'Adam' AND (d1.name IS NOT NULL OR d2.name IS NOT NULL);
方法2:合并数据表格的记录后关联Person表
先把data_1和data_2中Adam的记录合并(用UNION自动去重),再关联Person表获取年龄,逻辑更直观:
SELECT p.age FROM Person p JOIN ( SELECT name FROM data_1 WHERE name = 'Adam' UNION SELECT name FROM data_2 WHERE name = 'Adam' ) AS combined_records ON p.name = combined_records.name;
问题原因分析
你之前的连接逻辑错误在于没有将data_2直接关联到Person表,而是错误地关联到了data_1表(比如data_1 JOIN data_2 ON d1.name = d2.name)。这种关联方式只会返回同时存在于data_1和data_2的Adam记录,若Adam仅在其中一张表存在则无法获取数据,还可能因两张表的多条记录产生不必要的笛卡尔积。
内容的提问来源于stack exchange,提问作者Kryptic Coconut
相关产品推荐
相关产品推荐

