执行SELECT查询table1后,如何关联获取table2的指定列?
解决JOIN后列被替换、无法合并展示的问题
嘿,我完全懂你遇到的困扰——你其实是想把两个表的列并排展示,而不是让其中一个表的数据覆盖另一个对吧?这是刚用JOIN时特别常见的小误区~
问题大概率出在你SELECT列的时候没明确区分两个表的同名列,或者没把所有需要的列都列出来。比如如果table1和table2都有col1,你只写col1的话,数据库只会返回其中一个,看起来就像是“替换”了数据。
正确的写法示例
你需要明确指定每个列所属的表,给同名列加上别名,这样就能把两个表的列都合并展示了:
SELECT table1.id, -- 给table1的列起别名(如果和table2列名重复的话) table1.col1 AS t1_col1, table1.col2 AS t1_col2, table1.col3, -- 同理处理table2的列 table2.col1 AS t2_col1, table2.col2 AS t2_col2 FROM table1 -- 用INNER JOIN匹配两个表id相同的行 INNER JOIN table2 ON table1.id = table2.id WHERE (condition);
扩展:保留table1中无匹配的行
如果你想保留table1里那些在table2中没有对应id的行(即使table2没数据,table1的内容也显示),可以把INNER JOIN换成LEFT JOIN:
SELECT table1.id, table1.col1 AS t1_col1, table1.col2 AS t1_col2, table1.col3, table2.col1 AS t2_col1, table2.col2 AS t2_col2 FROM table1 LEFT JOIN table2 ON table1.id = table2.id WHERE (condition);
这样写之后,两个表的列就会并排显示,不会出现“替换”的情况了——核心就是明确指定列的归属,用别名区分重复的列名~
内容的提问来源于stack exchange,提问作者user9644796
相关产品推荐
相关产品推荐

