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 *
это довольно плохая практика в любом случае.