Select 其中多对 - postgresql

Select where in multiple pairs - postgresql

我想查找与成对列表(多列)匹配的所有行,但我的查询不起作用。如果我只有任一列的列表,但当它们配对时,我会得到结果。

SELECT * FROM table
WHERE (name,age) IN (('john',23),('jane',50),('john',44))

我看到了有关使用 EXISTS 的帖子,但我不知道如何转换此查询。

我检查了我的数据库,它应该 return 8 行,但它 return 是一个空的 table

您应该按照下面的说明使用:

SELECT * 
FROM t
WHERE (col1, col2) 
       IN ( VALUES (val1a, val2a), (val1b, val2b)) ;

您的查询将是:-

SELECT * FROM t
WHERE (name, age) IN ( VALUES ('john',23),('jane',50),('john',44));

I checked my database and it should return 8 rows but it is returning an empty table

您的支票有误。查询正在执行您想要的操作。

一种可能是名称不正确,因为它们有额外的字符——可能是隐藏的。你可以很容易地检查这个。这 return 有什么作用吗?

SELECT *
FROM table
WHERE name = 'john';

如果此 return 没有行,而您认为应该如此,那么您需要找出问题所在。这个条件行得通吗?

WHERE name LIKE '%john%'

问题可能出在名称开头的空格、隐藏字符或相似字符。

如果第一个查询执行 return 行,那么问题可能出在 age 上。这 return 有什么作用吗?

SELECT *
FROM table
WHERE name = 'john' AND age = 23;

age 的问题更微妙,但一种可能性是浮点表示,其中值实际上是 22.9999999997 而不是 23。