SQL 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 ответа

Решение

Возможно, вам придется использовать разные псевдонимы для каждого подзапроса. Это должно работать:

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

Если вы на самом деле используете SELECT * тогда zipcode_id столбец находится как в Jobs стол и Zipcode Таблица. Как говорится в сообщении об ошибке, вы не можете иметь два столбца с тем же именем, что и у вас. Поскольку вы используете подзапросы, у движка SQL не будет возможности понять, что вы имеете в виду, если сослаться на дублированное имя столбца. Например, что должен возвращать следующий SQL?

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

С помощью SELECT * это довольно плохая практика в любом случае.

Другие вопросы по тегам