SQL MS SQL Server V.8 UNION 问题

发布于 2024-07-26 16:44:53 字数 1137 浏览 3 评论 0原文

我正在使用这个查询:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

£烟消云散 2024-08-02 16:44:53

很抱歉,我无法准确理解您的问题是什么,但我想知道您的问题是否源于“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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文