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 表的联合,其中包含 PublicationID 和 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
I am using this query:
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
And it returns 0 results. What I am trying to do is add in a union with my PublicationsAreaBuy table, which contains a publicationID and an ABID (area buy id). What I am trying to do is if the above query returns a publicationID that is in the area buy table then I need to include (which is why I was using the union) the area buy id as a publication id.
This was my last attempt but again it returns 1 result whether the top query returns a result or not... my mind has gone completely blank on this one!
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
很抱歉,我无法准确理解您的问题是什么,但我想知道您的问题是否源于“UNION”运算符将消除重复行(有点像组合上的“SELECT DISTINCT”)询问)。 如果您不希望出现此行为,请改用“UNION ALL”。
我立即注意到的其他内容是这部分:“(pat.LastAdDate > 7 / 1 / 2009)”。 它看起来很像您试图将“LastAdDate”与硬编码的日期值进行比较。 实际上,您将“LastAdDate”与 7 除以 1 再除以 2009 的值进行比较。由于这是整数除法,因此您的表达式本质上是“(pat.LastAdDate > 0)”。
如果您确实想与硬编码日期进行比较,则需要将日期值放在单引号中,例如“(pat.LastAdDate > '7/1/2009')”。 在生产应用程序中,硬编码日期是一个坏主意,但我认为这只是为了测试/调试目的。
I'm sorry that I'm not able to understand exactly what your issue is, but I wonder if your issue stems from the fact that the "UNION" operator will eliminate duplicate rows (kind of like a "SELECT DISTINCT" over the combined query). If you don't want this behavior, use "UNION ALL" instead.
Something else I noticed right away was this part: "(pat.LastAdDate > 7 / 1 / 2009)". It looks very much like you are trying to compare "LastAdDate" to a hard-coded date value. In reality you are comparing "LastAdDate" to the value of 7 divided by 1 divided by 2009. Since this is integer division, your expression is essentially "(pat.LastAdDate > 0)".
If you really want to compare against a hard-coded date, you need to put the date value in single quotes, like this "(pat.LastAdDate > '7/1/2009')". In a production application, hard-coded dates are a bad idea, but I assume this is just for testing/debugging purposes.