多对一SQL IN语句

时间:2016-01-17 13:08:03

标签: mysql sql

假设我有一个MySQL表read,它记录了一个userid和一个articleid,记录了用户阅读了哪些文章。我现在要列出已阅读文章123的用户。

我知道以下是不可能的,但它说明了这个想法:

SELECT id
FROM user 
WHERE (1,2,3) IN (SELECT articleid FROM `read` WHERE userid=user.id);

这应该检查表1中的23articleid是否为read针对特定userid。这就是我对多对一IN语句的意思。

我可以在SQL中使用这个问题吗?

2 个答案:

答案 0 :(得分:2)

您可以使用聚合和having子句:

SELECT userid
FROM read
WHERE articleid IN (1, 2, 3)
GROUP BY userid
HAVING COUNT(DISTINCT articleid) = 3;

注意:如果read中没有重复项,请使用COUNT(*)代替COUNT(DISTINCT)

答案 1 :(得分:1)

试试这个

SELECT id
FROM user 
WHERE exists 
(
SELECT 1 FROM `read` WHERE userid=user.id
and articleid in (1,2,3)
having count(distinct articleid) = 3
);

对于给定的userid,如果只有1,2,3应为articleid's,那么

SELECT id
FROM user 
WHERE exists 
(
SELECT 1 FROM `read` WHERE userid=user.id
having count(case when articleid in (1,2,3) then 1 end)= count(*)
);