SQL - 返回记录组,其中一个字段与组中的所有记录不匹配

时间:2013-04-12 18:16:42

标签: mysql sql

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

我在编写一个查询时遇到困难,该查询将返回与一个或多个其他记录具有相同O_Id的表中的所有记录,但OrderPrice与记录之间的匹配不匹配相同的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       |
+------+------------+------------+

2 个答案:

答案 0 :(得分:1)

您可以获得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
)

答案 1 :(得分:0)

以下是使用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 )