Я думал, что запрос ниже естественно сделает то, что я объясняю, но по-видимому нет...
Моя таблица похожа на это:
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
Ваш запрос не работает, потому что каждая строка возвращается только один раз, независимо от того, соответствует ли она одному или обоим условиям. Чтобы получить желаемое, используйте два запроса и 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
вы можете попробовать UNION по такой схеме:
"SELECT id FROM mytable WHERE ( g = 'M') UNION SELECT id FROM mytable WHERE ( g2 = 'M')"
Надеюсь, это поможет, Мартин
SELECT id FROM mytable WHERE g = 'M'
UNION
SELECT id FROM mytable WHERE g2 = 'M'