Вопрос

Я использую этот запрос:

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')".В производственном приложении жестко закодированные даты - плохая идея, но я предполагаю, что это просто для целей тестирования / отладки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top