Множество встроенных И в части выбора в PostgreSQL - PullRequest
0 голосов
/ 24 октября 2018

Я использую PostgreSQL 10 и у меня есть следующая таблица.

id  name   place
1    20     56
2    21     51
3    21     53
4    21     54

select Я хочу сделать что-то вроде

select id from mytable where place = 51 and place=53 and place=54 and name = 21

Я должен в конечном итоге с id 2 3 4, но я могу использовать толькоplace и name.

Я также пытался select id from mytable where (place = 51 and name = 21) and (place=53 and name = 21) and (place=54 and name = 21)

, но получаю пустой набор результатов.

Как мне это синтаксис?

Спасибо

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Причина, по которой вы получаете пустые результаты, заключается в том, что у вас нет записей, где место равно 51 и 53. Очевидно, что место может содержать только одно значение на запись.

Я предполагаю, что вы пытаетесьвернуть какие-либо результаты, которые соответствуют любому из ваших критериев?Для этого попробуйте следующее:

SELECT id FROM mytable WHERE place IN (51, 53, 54) OR name IN (21);

Если вы хотите исключить какие-либо результаты, где имя не равно 21, вместо этого используйте AND.

SELECT id FROM mytable WHERE place IN (51, 53, 54) AND name = 21;

OR означает возврат записей, если оно соответствует какому-либо условиюa ' или ' условие b '.И означает возврат записи, только если она соответствует «условию a» И (а также) «условие b»

IN означает возврат записи, если оно соответствует какому-либо из значений IN список.

0 голосов
/ 24 октября 2018

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

SELECT id
FROM my_table 
WHERE place IN (51,53,54) AND name = 21
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...