2011-10-05 47 views
2

我需要兩個查詢的UNION,他們每個人分別工作,但不在一起,我得到錯誤:重複列名zipcode_id,請大家幫忙。SQL UNION的兩個查詢,重複的列名錯誤

(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

您可能需要爲每個子查詢使用不同的別名。這應該工作:

(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)
+0

非常感謝,它的作品! – ickx

4

如果你實際使用SELECT *那麼zipcode_id列是兩個Jobs表和Zipcode表。如錯誤消息所示,您不能使用與您擁有相同名稱的兩列。因爲你使用的是子查詢,如果你引用了重複的列名,那麼SQL引擎就無法理解你的意思了。例如,下面的SQL應該返回什麼?

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

使用SELECT *是在任何情況下一個非常糟糕的做法。

+0

如果我可以給你百萬upvotes! – HLGEM

+0

「你不能有兩列使用相同的名稱」 - 真的嗎?那麼下面是不是合法的語法? 'SELECT SNO,SNO從S UNION SELECT SNO,SNO從S;'??在我看來,在'UNION'中重複列名是合法的SQL語法。還是我誤解了你的意思是「不能使用同名的兩列」? – onedaywhen

+0

對不起,我應該更清楚了(我會更新我的答案)。問題是他將這些列放入子查詢中。 –