使用 sql where in operator with numbers

Using sql where in operator with numbers

我试图获取具有相似兴趣的不同用户并偶然发现了这个问题。基本上我想做这样的事情:

SELECT DISTINCT(uid) 
FROM interest 
WHERE (interest , score) IN (('family' , > 0.32), ('paris' , > 0.77));

我知道我可以加入多个 where 语句来实现这一点,但这将是一种更简洁的方法。这可能吗?

IN 不带运算符。它采用标量 values/tuples 或 returns 标量 values/tuples 的子查询。我想你想要:

SELECT DISTINCT uid
FROM interest 
WHERE (interest = 'family' AND score > 0.32) OR
      (interest = 'paris' AND score > 0.77);

您可以将其表示为:

SELECT DISTINCT i.uid
FROM interest i JOIN
     (VALUES ('family', 0.32), ('paris', 0.77)
     ) v(interest, threshold)
     ON i.interest = v.interest and i.score > v.threshold

您正在尝试使用 "tuples"。

在 PostgreSQL 中,元组可以处理等式或不等式。在任何一种情况下,所有值都将参与平等或不平等。您不能像您尝试的那样混合元组不同部分的操作:第一个元素的相等性,第二个元素的不等性。因此,在这种情况下,您将无法使用元组。

解决方案要简单得多。只需使用带有 OR 运算符的组合谓词,如:

SELECT DISTINCT(uid) 
FROM interest 
WHERE interest = 'family' and score > 0.32
   or interest = 'paris' and score > 0.77;