2013-04-12 44 views
1

在下面的示例表中,所有具有相同O_Id的记录也应具有相同的价格。显然,对于O_Id的1和3,并非所有记录都具有相同的价格。SQL - 返回其中一个字段在组中所有记录中不匹配的记录组

我有困难写一个查询,将来自具有相同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  | 
+------+------------+------------+ 

回答

1

你可以得到O_Id那里有关联多个不同的价格:

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

,并用它作为内部语句获取所有行这些O_Id S:

SELECT * 
FROM myTable 
WHERE O_Id IN (
    SELECT O_Id 
    FROM myTable 
    GROUP BY O_Id 
    HAVING COUNT(DISTINCT OrderPrice) > 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) 
相关问题