SQL MS SQL Server V.8 UNION проблема - PullRequest
0 голосов
/ 09 июля 2009

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

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, которая содержит идентификатор публикации и ABID (идентификатор покупки области). Я пытаюсь сделать, если приведенный выше запрос возвращает идентификатор публикации, который находится в таблице покупки области, тогда мне нужно включить (поэтому я использовал объединение) идентификатор покупки области в качестве идентификатора публикации.

Это была моя последняя попытка, но опять-таки она возвращает 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

1 Ответ

1 голос
/ 09 июля 2009

Мне жаль, что я не могу точно понять, в чем ваша проблема, но мне интересно, связана ли ваша проблема с тем, что оператор "UNION" удалит дублирующиеся строки (вроде как "SELECT DISTINCT" над объединенным запросом). Если вы не хотите такого поведения, используйте вместо этого «UNION ALL».

Еще одна вещь, которую я сразу заметил, была эта часть: "(pat.LastAdDate> 7/1/2009)". Похоже, вы пытаетесь сравнить «LastAdDate» с жестко заданным значением даты. В действительности вы сравниваете «LastAdDate» со значением 7, деленным на 1, деленным на 2009 год. Поскольку это целочисленное деление, ваше выражение по существу «(pat.LastAdDate> 0)».

Если вы действительно хотите сравнить с жестко запрограммированной датой, вам нужно поместить значение даты в одинарные кавычки, например, «(pat.LastAdDate> '01.07.2009')». В производственном приложении жестко закодированные даты - плохая идея, но я предполагаю, что это только для целей тестирования / отладки.

...