Со следующим CTE:
WITH cteRoute AS (
SELECT *
FROM CRROUTE cr
JOIN crewleg cl on (cr.CDATE = cl.CDATE AND cr.CROUTE = cl.croute)
left JOIN legmain lm on (lm.DAY = cl.DAY AND lm.DEP = cl.DEP and lm.CARRIER = cl.CARRIER and lm.FLT = cl.FLT and lm.LEGCD = cl.LEGCD )
left JOIN legtimes lt on (lt.DAY = lm.DAY AND lt.DEP = lm.DEP and lt.CARRIER = lm.CARRIER and lt.FLT = lm.FLT and lt.LEGCD = lm.LEGCD )
where cr.cdate = 14000
and cr.croute = 138266498116
)
Я получаю сообщение о том, что CARRIER был выбран несколько раз в CTE.
И да, это правильно.Из-за SELECT *
он действительно был выбран несколько раз.
У меня вопрос , а не , как это исправить.Я знаю, как это исправить, перечислив конкретные столбцы в запросе, а не выбирая их все через SELECT *.
Проблема в том, что база данных, с которой я работаю, принадлежит стороннему поставщику (в Греции), которые я не могу контролировать, и они ОЧЕНЬ "неаккуратны" в своей структуре и нормализации базы данных.
Этот запрос будет возвращать пару сотен столбцов. Я действительно не хочу специально перечислять их все.
Механизм запросов SQL Server вполне способенвытащить несколько столбцов с одним и тем же именем:
SELECT 'this' as LABEL, 'that' as LABEL
Будет работать нормально, возвращая два столбца ОБА с именем "LABEL".
У меня вопрос, есть ли способпопросить механизм запросов игнорировать повторяющиеся имена столбцов в общем табличном выражении?
Он может сделать это в обычном запросе (как показано выше), но, похоже, не может сделать это в CTE.
Рассматриваемые столбцы - это столбцы, используемые в соединении JOIN, и они всегда будут равны.
Обновление
Этот вопрос аналогичен другие вопросы, но имеет уникальный нюанс , который делает его НЕ дубликатом.Если этот файл на самом деле IS дубликат, то непременно отметьте его как таковой, и я буду весьма счастлив - особенно если у него есть ответ.