繁体   English   中英

SQL —返回记录组,其中字段之一与组中的所有记录都不匹配

[英]SQL — return groups of records where one of the fields does not match amongst all records in the group

在下面的示例表中,所有具有相同O_Id记录也应具有相同的价格。 显然,对于O_Id的1和3,并非所有记录的价格都相同。

我很难编写查询,该查询将返回具有与一个或多个其他记录相同的O_Id的表中的所有记录,但其中OrderPrice在具有相同O_id记录之间不匹配的O_id

样表:

+------+------------+------------+
| Type |  MySQL     | OrderPrice |
+======+============+============+
| 1    | 2008/11/12 | 1000       |
| 1    | 2008/10/23 | 2000       |
| 2    | 2008/09/02 |  700       |
| 2    | 2008/09/03 |  700       |
| 3    | 2008/08/30 | 2000       |
| 3    | 2008/10/04 | 2100       |
| 3    | 2008/08/30 | 2000       |
| 3    | 2008/10/04 | 2000       |
+------+------------+------------+

样本结果集:

+------+------------+------------+
| Type |  MySQL     | OrderPrice |
+======+============+============+
| 1    | 2008/11/12 | 1000       |
| 1    | 2008/10/23 | 2000       |
| 3    | 2008/08/30 | 2000       |
| 3    | 2008/10/04 | 2100       |
| 3    | 2008/08/30 | 2000       |
| 3    | 2008/10/04 | 2000       |
+------+------------+------------+

您可以在以下一种以上的不同价格下获得O_Id

SELECT O_Id
FROM myTable
GROUP BY O_Id
HAVING COUNT(DISTINCT OrderPrice) > 1

并将其用作内部语句来获取这些O_Id的所有行:

SELECT *
FROM myTable
WHERE O_Id IN (
    SELECT O_Id
    FROM myTable
    GROUP BY O_Id
    HAVING COUNT(DISTINCT OrderPrice) > 1
)

这是使用Exists的解决方案:

Select * From OrderTable O
Where Exists(
    Select O_Id From OrderTable
    Where O_Id = O.O_Id
    Group By O_Id
    Having Count(Distinct OrderPrice) > 1 )

暂无
暂无

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

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