SQL MS SQL Server V.8 UNION问题

时间:2009-07-08 20:01:12

标签: sql sql-server sql-server-2000 union

我正在使用此查询:

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(区域购买ID)。我想要做的是,如果上面的查询返回区域购买表中的publicationID,那么我需要包括(这就是我使用工会的原因)区域购买ID作为发布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

1 个答案:

答案 0 :(得分:1)

对不起,我无法确切地理解你的问题是什么,但我想知道你的问题是否源于“UNION”操作符将消除重复行(类似于“SELECT DISTINCT”的事实)结合查询)。如果您不想要此行为,请改为使用“UNION ALL”。

我立即注意到的另一件事就是这部分:“(pat.LastAdDate> 7/1/2009)”。它看起来非常像你试图将“LastAdDate”与硬编码的日期值进行比较。实际上,您将“LastAdDate”与7除以1除以2009进行比较。由于这是整数除法,因此您的表达式基本上是“(pat.LastAdDate> 0)”。

如果您真的想要与硬编码日期进行比较,则需要将日期值放在单引号中,例如“(pat.LastAdDate>'7/1/2009')”。在生产应用程序中,硬编码日期是一个坏主意,但我认为这仅用于测试/调试目的。