postgres считает одну запись дважды, если она соответствует определенным критериям - PullRequest
1 голос
/ 30 мая 2010

Я думал, что приведенный ниже запрос, естественно, сделает то, что я объясняю, но, видимо, нет ...

Мой стол выглядит так:

id | name | g | partner | g2
1 | John | M | Sam | M
2 | Devon | M | Mike | M
3 | Kurt | M | Susan | F
4 | Stacy | F | Bob | M
5 | Rosa | F | Rita | F

Я пытаюсь получить идентификатор, где значение g или g2 равно 'M' ... Но запись, в которой значения g и g2 равны 'M', должна возвращать две строки, а не 1.

Итак, в приведенных выше примерах данных я пытаюсь вернуть:

$q = pg_query("SELECT id FROM mytable WHERE ( g = 'M' OR g2 = 'M' )");

1
1
2
2
3
4

Но всегда возвращается:

1
2
3
4

Ответы [ 3 ]

4 голосов
/ 30 мая 2010

Ваш запрос не работает, потому что каждая строка возвращается только один раз, если она соответствует одному или обоим условиям. Чтобы получить то, что вы хотите, используйте два запроса и используйте UNION ALL для объединения результатов:

SELECT id FROM mytable WHERE g = 'M'
UNION ALL
SELECT id FROM mytable WHERE g2 = 'M'
ORDER BY id

Результат:

1
1
2
2
3
4
0 голосов
/ 30 мая 2010
SELECT id FROM mytable WHERE g = 'M'
UNION
SELECT id FROM mytable WHERE g2 = 'M'
0 голосов
/ 30 мая 2010

вы можете попробовать UNION по следующим направлениям:

"Идентификатор SELECT из mytable WHERE (g = 'M') UNION Идентификатор SELECT из mytable WHERE (g2 = 'M')"

Надеюсь, это поможет, Мартин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...