使用 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;
我试图获取具有相似兴趣的不同用户并偶然发现了这个问题。基本上我想做这样的事情:
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;