如何在SQL Union Query中获得非重复记录?

问题描述 投票:0回答:1

我的SQL UNION命令正在生成重复的记录。是的,我知道UNION ALL应该包含重复项,而UNION不...但是由于某种原因,我的仍然在生成重复项。我不是SQL专家,并且了解足够多,可以使用简单和基本的命令来获取所需的信息……因此,我敢肯定,我在某个地方搞砸了。

目标:从SQL数据库检索新闻文章。我想抓最多4篇文章,其中最相关的文章是第一篇。如果少于4条相关文章(尚未过期),我想用最新创建的文章(尚未过期)填充其余内容。 (过期的文章表示某种交易已经结束,因此无需向公众展示该文章。)>

当前代码(带有示例):

SELECT *, 0 AS Priority 
FROM tblNews WHERE (ArticleKeywords LIKE '%alaska airlines%')
AND (CURRENT_DATE < ArticleExpireDate OR ArticleExpireDate = '0000-00-00') 
UNION 
SELECT *, 1 AS Priority 
FROM tblNews WHERE (CURRENT_DATE < ArticleExpireDate OR ArticleExpireDate = '0000-00-00') 
ORDER BY Priority, ArticleDate DESC LIMIT 4

此代码目前正在生成预期的四篇文章,但显示:

  1. 阿拉斯加航空公司的文章(相关文章)
  2. 第2条(最新文章)
  3. 第3条(最新文章)
  4. 阿拉斯加航空公司文章(最新文章)
  5. 这是因为a)阿拉斯加航空公司的文章是唯一相关的文章,b)阿拉斯加航空公司的文章也恰好是我最近的文章之一。

我如何使这个UNION正常工作,以便它抓住相关文章并用最新的文章填充其余文章,而不包括可能也是新的重复文章?

[Sidenote(如果重要):如果关键字不止一个,则初始WHERE命令可以包含多个LIKE命令。我在此命令中保持简单,只显示了一个关键字。我的php代码生成多个LIKE命令的功能可以正常工作...但是我想以防万一。]

提前感谢!

我的SQL UNION命令正在生成重复的记录。是的,我知道UNION ALL应该包含重复项,而UNION不...但是由于某种原因,我的仍然在生成重复项。我是...

mysql sql phpmyadmin duplicates union
1个回答
0
投票

请勿使用UNION ALL。使用ORDER BY


0
投票

结果集中的附加列,称为Priority,可防止MySQL将记录标识为重​​复项。

© www.soinside.com 2019 - 2024. All rights reserved.