MySQL选择一列相同的不同行,第二列是" 3"或" 4"

时间:2014-12-28 16:11:20

标签: mysql

我有一个表格,其数据看起来像这样:

    +------+--------+------------+
    | id   | Action | GeoDataID  |
    +------+--------+------------+
    | 1    | 3      | 117085664  |
    | 2    | 4      | 117085664  |
    | 3    | 3      | 117096940  |
    | 4    | 3      | 117096404  |
    +------+--------+------------+

现在,我想获得所有只有action = 3的GeoDataID,而不是action = 4. PS !! 1和2具有IDENTICAL GeoDataID,不应在结果中返回第1行。 从id 1和2可以看出,它们具有相同的GeoDataID。

从这个例子中我只想输出id 3和4.我一直在试图谷歌,但找不到类似于我想要的东西。

从上面的例子中,结果应该是:

+------+--------+------------+
| id   | Action | GeoDataID  |
+------+--------+------------+
| 3    | 3      | 117096940  |
| 4    | 3      | 117096404  |
+------+--------+------------+
由于GeoDataID 117085664具有Action 4,因此不包括

1和2。

1 个答案:

答案 0 :(得分:0)

您可以通过使用NOT EXISTS引入“否定条件”来排除具有相同GeoDataID但行动4的项目:

SELECT mt1.id, mt1.Action, mt1.GeoDataID 
FROM MyTable mt1
WHERE mt1.Action = 3
AND NOT EXISTS 
(
   SELECT 1
   FROM MyTable mt2
   WHERE mt2.Action = 4
         AND mt2.GeoDataID = mt1.GeoDataID
);

SqlFiddle here