Проблема с объединением SQL MS SQL Server V.8
-
11-09-2019 - |
Вопрос
Я использую этот запрос:
SELECT DISTINCT pat.PublicationID
FROM dbo.PubAdvTransData AS pat INNER JOIN
dbo.PubAdvertiser AS pa ON pat.AdvTransID = pa.AdvTransID
WHERE (pa.AdvertiserID = 31331) AND (pat.LastAdDate > 7 / 1 / 2009)
ORDER BY pat.PublicationID
И это возвращает 0 результатов.То, что я пытаюсь сделать, это добавить объединение с моей таблицей PublicationsAreaBuy, которая содержит publicationID и ABID (идентификатор покупки области).Что я пытаюсь сделать, так это если приведенный выше запрос возвращает publicationID, который находится в таблице area buy, тогда мне нужно включить (именно поэтому я использовал объединение) идентификатор area buy id в качестве идентификатора публикации.
Это была моя последняя попытка, но снова она возвращает 1 результат, независимо от того, возвращает верхний запрос результат или нет...у меня в голове совершенно ничего не укладывается по этому поводу!
SELECT DISTINCT pat.PublicationID
FROM dbo.PubAdvTransData AS pat INNER JOIN
dbo.PubAdvertiser AS pa ON pat.AdvTransID = pa.AdvTransID
WHERE (pat.LastAdDate > 7 / 1 / 2009) AND (pat.PublicationID = 29171)
UNION
SELECT AreaBuy.AreaBuyID AS PublicationID
FROM AreaBuy INNER JOIN
PublicationAreaBuy ON AreaBuy.AreaBuyID = PublicationAreaBuy.AreaBuyID INNER JOIN
dbo.PubAdvertiser AS PubAdvertiser_1 ON PubAdvertiser_1.PublicationID = PublicationAreaBuy.PublicationID
ORDER BY pat.PublicationID
Решение
Мне жаль, что я не могу точно понять, в чем ваша проблема, но мне интересно, связана ли ваша проблема с тем фактом, что оператор "UNION" удалит повторяющиеся строки (что-то вроде "SELECT DISTINCT" по объединенному запросу).Если вы не хотите такого поведения, используйте вместо этого "ОБЪЕДИНИТЬ ВСЕ".
Кое-что еще, на что я сразу обратил внимание, было в этой части:"(pat.LastAdDate > 7 / 1 / 2009)".Это очень похоже на то, что вы пытаетесь сравнить "LastAdDate" с жестко заданным значением даты.На самом деле вы сравниваете "LastAdDate" со значением 7, деленным на 1, деленное на 2009.Поскольку это целочисленное деление, ваше выражение по сути равно "(pat.LastAdDate > 0)".
Если вы действительно хотите сравнить с жестко заданной датой, вам нужно заключить значение даты в одинарные кавычки, например, так "(pat.LastAdDate > '7/1/2009')".В производственном приложении жестко закодированные даты - плохая идея, но я предполагаю, что это просто для целей тестирования / отладки.