PostgreSQL LEFT JOIN后关联列重复的原因咨询
为什么PostgreSQL LEFT JOIN后会出现重复的关联列?
嘿,这个问题我太熟悉了!咱们来唠唠为啥执行这条LEFT JOIN后会冒出两个index列:
SELECT *的“全部返回”特性:当你用SELECT *的时候,PostgreSQL会把参与JOIN的两张表的所有列一股脑儿都返回给你。因为ltc_ts(别名lt)和ltc_stock_metrics(别名lsm)都有index这个列,结果里自然就会出现两个一模一样名字的列——一个来自左表lt,一个来自右表lsm。PostgreSQL不会自动合并同名列:和有些数据库的“智能合并”不同,PostgreSQL会严格按照你查询的要求,如实返回每个表的原始列,哪怕列名重复也不会自作主张去掉其中一个。它的逻辑是:既然你要“所有列”,那两张表的列我都得给你,哪怕名字一样。
如果不想看到重复列,其实改改查询语句就行:
- 明确指定需要的列,避免用
SELECT *:
select lt."index", lt.column1, lt.column2, lsm.columnA, lsm.columnB from ltc_ts lt left join ltc_stock_metrics lsm on lt."index" = lsm."index"
- 要是需要区分两个
index列,还可以给它们加别名:
select lt."index" as left_index, lsm."index" as right_index, ... from ltc_ts lt left join ltc_stock_metrics lsm on lt."index" = lsm."index"
内容的提问来源于stack exchange,提问作者arrabattapp man
相关产品推荐
相关产品推荐

