我需要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)
答案 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)