You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中删除与临时表JOIN后产生的重复冗余列?

出现重复gene_id列的核心原因是SELECT *会返回JOIN两侧两个表的所有字段,而你的业务表和临时表都包含gene_id字段,数据库会自动为重复字段添加后缀区分,就出现了内容完全一致的两列gene_id和gene_id_1,你可以用以下三种方法解决:

  • 方案1:手动指定需要的查询列(兼容性最高,推荐优先使用)
    不用SELECT *,按需列出你最终需要的字段即可:
WITH tempID AS (
    SELECT DISTINCT transcript_id, gene_id 
    FROM `lab-stuff.rna_seq.RN6`
)
SELECT 
  data_111.gene_id,
  data_111.gene_name,
  data_111.FPKM,
  data_111.TPM,
  tempID.transcript_id
FROM `lab-stuff.rna_seq.1_1_1` AS data_111
RIGHT JOIN tempID
ON data_111.gene_id = tempID.gene_id
ORDER BY TPM DESC
  • 方案2:用USING替代ON写关联条件(适用于关联字段名完全相同的场景)
    如果两个表的关联字段名完全一致,可以用USING替换ON,数据库会自动合并重复的关联字段,即使写SELECT *也不会出现重复列:
WITH tempID AS (
    SELECT DISTINCT transcript_id, gene_id 
    FROM `lab-stuff.rna_seq.RN6`
)
SELECT *
FROM `lab-stuff.rna_seq.1_1_1` AS data_111
RIGHT JOIN tempID
USING(gene_id)
ORDER BY TPM DESC
  • 方案3:用列排除语法直接删除多余列(适用于支持该语法的SQL引擎,如BigQuery、Snowflake等)
    如果你不想手动写所有字段,可以直接用EXCEPT语法排除多余的重复列:
WITH tempID AS (
    SELECT DISTINCT transcript_id, gene_id 
    FROM `lab-stuff.rna_seq.RN6`
)
SELECT * EXCEPT(gene_id_1)
FROM `lab-stuff.rna_seq.1_1_1` AS data_111
RIGHT JOIN tempID
ON data_111.gene_id = tempID.gene_id
ORDER BY TPM DESC

内容的提问来源于stack exchange,提问作者Luca Salerno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:36:03