ВЫБЕРИТЕ DISTINCT поле, но избегайте некоторых значений - PullRequest
1 голос
/ 27 июля 2011

У меня есть следующая таблица:

---------------------------
| 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 |
---------------------------

Мне нужно выбрать только отличные заглавные_идентификаторы, но отличающиеся от той, которая имеет данное значение.

Для большей ясности приведу пример: если у меня есть запись с 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 ]

2 голосов
/ 27 июля 2011
SELECT capital_id 
FROM tableName
WHERE capital_id <> $capital_id
GROUP BY 1
HAVING SUM(value = $value) = 0
0 голосов
/ 27 июля 2011
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
0 голосов
/ 27 июля 2011

Попробуйте это.

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