多个值 IN

发布于 2024-12-06 22:14:20 字数 361 浏览 0 评论 0原文

通常 IN 与一个值一起使用:

SELECT * FROM data WHERE f1 IN (<subquery>)

可以将它与多个值一起使用:

SELECT * FROM data WHERE f1 IN (<subquery>) OR f2 IN (<subquery>);

但是我可以删除重复项,例如:

SELECT * FROM data WHERE ANY(f1, f1) IN (<subquery>)

我尝试使用 CTE,但它也需要子查询。

Normally IN is used with one value:

SELECT * FROM data WHERE f1 IN (<subquery>)

It is possible to use it with multiple values:

SELECT * FROM data WHERE f1 IN (<subquery>) OR f2 IN (<subquery>);

But can I remove duplication, something like:

SELECT * FROM data WHERE ANY(f1, f1) IN (<subquery>)

I tried to use CTE, but it also require subquery.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

温折酒 2024-12-13 22:14:20

假设您有列 col1col2col3 并且您正在查找 col1col2 在子查询中(为了便于说明),您可以执行以下操作:

select col1,col2,col3
from table
where (col1,col2) in (<subquery>)
group by 1,2,3;

只要 的形式为(粗略)select col1,col2从,那么您最终会得到不同的 (col1,col2,col3) 三元组,其中 (col1,col2) 对出现在 <子查询>

Assuming you have columns col1,col2, and col3 and that you're looking for col1 and col2 in your subquery (for the sake of illustration), you can do something like:

select col1,col2,col3
from table
where (col1,col2) in (<subquery>)
group by 1,2,3;

As long as <subquery> is of the (rough) form select col1,col2 from <blah>, then you'll end up with distinct (col1,col2,col3) triples where (col1,col2) pairs appear in <subquery>.

寒冷纷飞旳雪 2024-12-13 22:14:20

我可以用集合运算符来写:

SELECT *
FROM data
WHERE EXISTS (
    VALUES(f1, f2)

    INTERSECT

    SELECT(<subquery>)
)

I might write this in terms of set operators:

SELECT *
FROM data
WHERE EXISTS (
    VALUES(f1, f2)

    INTERSECT

    SELECT(<subquery>)
)
胡大本事 2024-12-13 22:14:20

虽然这两种解决方案都有效,但我发现最快(不幸的是不是最短)的方法是使用 CTE:

WITH x AS (<subquery>)
SELECT * FROM data WHERE f1 IN (SELECT * FROM x) OR f2 (SELECT * FROM x)

While both solutions works, I have found that fastest (unfortunately not shortest) way is to use CTE:

WITH x AS (<subquery>)
SELECT * FROM data WHERE f1 IN (SELECT * FROM x) OR f2 (SELECT * FROM x)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文