【问题标题】:Duplicate Column name error while executing mysql query?执行mysql查询时重复列名错误?
【发布时间】:2014-04-07 06:59:35
【问题描述】:
SELECT t1.*,t2.* FROM  

(SELECT pp.id as ppid, pp.*,tab3.*,tab2.*  FROM tab1 AS pp 
LEFT JOIN tab3 ON pp.id = tab3.name_id 
LEFT JOIN tab2 ON pp.id = tab2.name_id) AS t1

JOIN 
(
SELECT tab2.id as colname_id,tab2.*,tab3.* FROM tab2 
LEFT JOIN tab3 ON tab2.coltestconsent_id = tab3.coltestconsent_ID
) AS t2

WHERE t1.ppid = t2.colname_id;

描述:上面的查询没有运行它的创建错误:

错误代码:1060 重复的列名“id”

为了使上述查询成功,我必须输入列名而不是“*” 如下:

SELECT t1.*,t2.* FROM  

(SELECT pp.first_name,pp.id ppid,tab3.id AS coltestrisk_id,tab2.id AS coltest_id  FROM tab1 AS pp 
LEFT JOIN tab3 ON pp.id = tab3.name_id 
LEFT JOIN tab2 ON pp.id = tab2.name_id) AS t1

JOIN 
(
SELECT tab2.coltestconsent_id AS coltestconsent_id,tab3.coltestconsent_ID AS colriskconsent_id,tab2.name_id AS colname_id,tab3.name_id AS coltest_nameid FROM tab2 
LEFT JOIN tab3 ON tab2.coltestconsent_id = tab3.coltestconsent_ID
) AS t2

WHERE t1.ppid = t2.colname_id;

要求:我想获取所有表的所有列值。每个表有 60-80 列。我不想在我的查询中手动输入列名,因为它们有很多列。

【问题讨论】:

  • 你还有一个错误,在 "as t2" 之后,你还没有应用 "on"
  • @AK47:在 MySQL 中,连接谓词是可选的。

标签: mysql sql


【解决方案1】:

不需要派生表:

SELECT t1_pp.id AS ppid, t2_tab2.id AS colname_id, *
FROM   (
              tab1 AS t1_pp 
    LEFT JOIN tab3 AS t1_tab3 ON t1_pp.id = t1_tab3.name_id 
    LEFT JOIN tab2 AS t1_tab2 ON t1_pp.id = t1_tab2.name_id
       ) JOIN (
              tab2 AS t2_tab2
    LEFT JOIN tab3 ON t2_tab3 USING (coltestconsent_id)
       ) ON t1_pp.id = t2_tab2.id

【讨论】:

    【解决方案2】:

    你没有提到*喜欢你的代码:

    可能是因为select *中的*选择了同名的two columns name

    SELECT pp.id as ppid, pp.*,tab3.*,tab2.*  FROM tab1 AS pp
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-18
      • 2014-03-18
      • 1970-01-01
      • 2018-06-07
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多