繁体   English   中英

sql SELECT查询没有做相反的事情

[英]sql SELECT query not doing the opposite

即时通讯使用一个查询来检查重复值,但现在我希望它执行与此查询相反的操作:

SELECT * FROM orders WHERE buy_date (SELECT buy_date FROM orders GROUP BY buy_date HAVING count(*)>1)

结果: 结果

我尝试更改HAVING count(*)=0 / HAVING count(*)<1使其不返回任何内容

having count(*) < 1的限制子句将不会返回值。 您不能连续返回记录集! 尝试HAVING count(*) < 2将返回计数为1的行。

您可能还想检查一下DISTINCT 函数 ,该函数返回不同的值。

我想您考虑重复两个具有相同buy_date和不同id的订单(我想id是PK字段的名称)

对于重复项,请尝试以下操作:

SELECT o1.*
FROM orders o1
WHERE EXISTS(
    SELECT 'duplicate'
    FROM orders o2
    WHERE o1.id <> o2.id
   AND o1.buy_date = o2.buy_date
)

对于单身人士,请尝试以下操作:

SELECT o1.*
FROM orders o1
WHERE NOT EXISTS(
    SELECT 'duplicate'
    FROM orders o2
    WHERE o1.id <> o2.id
   AND o1.buy_date = o2.buy_date
)

如您所说,Count> 1将返回重复项。 Count = 1将返回非重复项。

它不应该是count(*)= 1吗?

如果count(*)= 0,则意味着您只选择那些不存在的记录...因此它正确地不返回任何内容。

或者,如果您想在数学上正确,则sth>1取反就是sth<=1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM