SQL UNION的两个查询,重复列名错误

时间:2011-10-05 16:11:56

标签: sql duplicates union

我需要UNION两个查询,每个查询分开工作,但不能一起工作,我收到错误:重复列名zipcode_id,请帮忙。

(SELECT * FROM
    ( (SELECT * FROM jobs AS j LEFT JOIN zipcode AS z ON z.zipcode_id=j.zipcode_id WHERE 1 AND source='student'
              ORDER BY postdate DESC LIMIT 20) ORDER BY search_order DESC ) 
s1)
    UNION ALL
(SELECT * FROM
        (  (SELECT * FROM jobs AS j LEFT JOIN zipcode AS z ON z.zipcode_id=j.zipcode_id WHERE 1 AND source='manager'
               ORDER BY postdate DESC LIMIT 30, 1000000) ORDER BY postdate DESC )
s2)

2 个答案:

答案 0 :(得分:4)

如果您实际使用的是SELECT *,那么zipcode_id列同时位于Jobs表和Zipcode表中。正如错误消息所示,您不能使用与您拥有的相同名称的两列。因为您正在使用子查询,所以如果您引用了重复的列名,SQL引擎将无法理解您的意思。例如,以下SQL应该返回什么?

SELECT num FROM (SELECT 1 AS num, 2 AS num) AS SQ

在任何情况下使用SELECT *都是非常糟糕的做法。

答案 1 :(得分:3)

您可能需要为每个子查询使用不同的别名。这应该有效:

    (SELECT * FROM
    ( (SELECT j1.* FROM jobs AS j1 LEFT JOIN zipcode AS z1 ON z1.zipcode_id=j1.zipcode_id WHERE 1 AND source='student'
              ORDER BY postdate DESC LIMIT 20) ORDER BY search_order DESC ) s1) UNION ALL
(SELECT * FROM
        (  (SELECT j2.* FROM jobs AS j2 LEFT JOIN zipcode AS z2 ON z2.zipcode_id=j2.zipcode_id WHERE 1 AND source='manager'
               ORDER BY postdate DESC LIMIT 30, 1000000) ORDER BY postdate DESC )
s2)