PostgreSQL中Select的Where部分中嵌入了多个AND

PostgreSQL中Select的Where部分中嵌入了多个AND,sql,postgresql,select,syntax,Sql,Postgresql,Select,Syntax,我使用PostgreSQL 10,我有下表 id name place 1 20 56 2 21 51 3 21 53 4 21 54 我想做的select 从mytable中选择id,其中place=51,place=53,place=54,name=21 我必须以id2 3 4结束,但我只能使用place和name 我还尝试了从mytable中选择id,其中(place=51,name=21)和(place=53,name=21

我使用PostgreSQL 10,我有下表

id  name   place
1    20     56
2    21     51
3    21     53
4    21     54
我想做的
select

从mytable中选择id,其中place=51,place=53,place=54,name=21

我必须以id
2 3 4
结束,但我只能使用
place
name

我还尝试了
从mytable中选择id,其中(place=51,name=21)和(place=53,name=21)以及(place=54,name=21)

但我总是得到一组空的结果

我怎么能这样呢

谢谢

试试这个

SELECT id
FROM my_table 
WHERE place IN (51,53,54) AND name = 21
试试这个

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

得到空结果的原因是因为没有位置同时等于51和53的记录。显然,每个记录的位置只能是一个值

我假设您正在尝试返回任何符合您的条件的结果?为此,请尝试以下方法:

SELECT id FROM mytable WHERE place IN (51, 53, 54) OR name IN (21);
如果要排除名称不是21的任何结果,请使用和

SELECT id FROM mytable WHERE place IN (51, 53, 54) AND name = 21;
或者,如果符合“条件a”或“条件b”,则表示返回记录。 仅当符合“条件a”和“条件b”时,表示返回记录


IN表示如果与列表中的任何值匹配,则返回记录。

获得空结果的原因是因为没有位置同时等于51和53的记录。显然,每个记录的位置只能是一个值

我假设您正在尝试返回任何符合您的条件的结果?为此,请尝试以下方法:

SELECT id FROM mytable WHERE place IN (51, 53, 54) OR name IN (21);
如果要排除名称不是21的任何结果,请使用和

SELECT id FROM mytable WHERE place IN (51, 53, 54) AND name = 21;
或者,如果符合“条件a”或“条件b”,则表示返回记录。 仅当符合“条件a”和“条件b”时,表示返回记录


IN表示如果与列表中的任何值匹配,则返回记录。

使用:置于(51,53,54)中,name=21。一个列可以同时等于(请注意,您正在使用AND)一个以上的值。@sagi谢谢,它马上就起作用了。我可以自由地把这变成一个正常的答案,所以我可以投票并选择正确的答案使用:placein(51,53,54),name=21。一个列可以同时等于(请注意,您正在使用AND)一个以上的值。@sagi谢谢,它马上就起作用了。我可以自由地把这变成一个正常的答案,所以我可以投票选择正确的答案