SELECT DISTINCT字段,但避免使用某些值

时间:2011-07-26 22:05:47

标签: mysql group-by distinct

我有下表:

---------------------------
| id | capital_id | value |
---------------------------
|  1 |          1 |     a |
---------------------------
|  2 |          2 |     b |
---------------------------
|  3 |          2 |     c |
---------------------------
|  4 |          2 |     d |
---------------------------
|  5 |          3 |     b |
---------------------------
|  6 |          3 |     e |
---------------------------
|  7 |          4 |     f |
---------------------------

我只需要选择不同 capital_id,但不同与给定值的

为了更清楚,我将提供一个示例:如果我有id = 5的记录,我需要获取所有不同 capital_id,不同于3且值不同于' b'(所以要获取的capital_id是:1和4)。

我设法编写了像SELECT id FROM table WHERE capital_id != $capital_id AND value != $value这样的查询,但重复的capital_id是以这种方式获取的。我尝试添加GROUP BY capital_id,但是也会获取capital_id = 2,尽管其中一个值是'b'。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

SELECT capital_id 
FROM tableName
WHERE capital_id <> $capital_id
GROUP BY 1
HAVING SUM(value = $value) = 0

答案 1 :(得分:0)

试试这个。

SELECT DISTINCT id FROM table WHERE capital_id != $capital_id AND value != $value

答案 2 :(得分:0)

SELECT capital_id
FROM tableName t
WHERE capital_id != $capital_id
AND NOT EXISTS(SELECT *
               FROM tableName
               WHERE capital_id = t.capital_id
               AND value = $value)
GROUP BY capital_id