gpt4 book ai didi

sql - 仅当所有连接条件都匹配时,Oracle 才返回行

转载 作者:行者123 更新时间:2023-12-01 09:19:31 24 4
gpt4 key购买 nike

http://sqlfiddle.com/#!4/bab93d

查看 SQL Fiddle 示例...我有客户、标签和映射表。我正在尝试通过标签实现客户搜索,它必须是 AND 搜索。查询传递一个标签标识符列表(任何数字),它必须只返回拥有所有标签的客户。

在示例中,我使用了 IN 运算符,但这对应于 OR 搜索并且不能解决我的问题。查询应该是什么样的 AND 搜索?

select
*
from
customer c
inner join customer_tag ct on ct.customer_id = c.customer_id
where
ct.tag_id in (1, 2);

这会返回两个客户,但只有第一个客户被标记为标签 1 和 2。

最佳答案

您可以使用相关子查询来获取所有客户的列表:

SELECT  *
FROM customer c
WHERE c.customer_ID IN
(
SELECT customer_id
FROM customer_tag ct
WHERE ct.customer_id = c.customer_id
AND ct.tag_id IN (1,2)
GROUP BY customer_id
HAVING COUNT(DISTINCT tag_id) = 2
);

LiveDemo

很容易扩展:

WHERE ct_tag IN (1,2,3)
...
HAVING COUNT(DISTINCT tag_id) = 3

关于sql - 仅当所有连接条件都匹配时,Oracle 才返回行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36080013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com