2009-07-08 80 views
-1

我使用此查询:SQL MS SQL Server的V.8 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表的联合,其中包含发布ID和ABID(区域购买ID)。我想要做的是,如果上述查询返回区域购买表中的发布ID,那么我需要包括(这就是为什么我使用联盟)区域购买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 
+0

什么是“V.8”?你的意思是SQL Server 2008吗? – 2009-07-09 03:16:15

+0

可能是因为SQL Server 2000安装到8.0文件夹中,并将其自身报告为版本8 @@版本 – MartW 2009-11-13 20:24:54

回答

1

我很抱歉,我无法理解你的问题是什么,但我不知道您的问题来源于这样的事实,该“联盟”运营商将消除重复行(有点像“SELECT DISTINCT”通过组合查询)。如果您不想要这种行为,请改为使用“UNION ALL”。

我马上注意到的其他东西就是这部分:“(pat.LastAdDate> 7/1/2009)”。它看起来非常像您试图将“LastAdDate”与硬编码的日期值进行比较。实际上,您将“LastAdDate”与7除以1后的值相比较。由于这是整数除法,因此您的表达本质上是“(pat.LastAdDate> 0)”。

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