列出下表:
表:USER_ASSETS
USER_ID | ASSET_ID
-------------------
1 | 1
-------------------
1 | 2
-------------------
1 | 3
-------------------
2 | 2
-------------------
2 | 3
-------------------
如果我搜索USER_ID
ASSET_ID
等于1和2,它应该返回USER_ID
1,因为USER_ID
1有ASSET_ID
&#39 ; s 1和2。
如果我通过ASSET_ID
= 1和2和4,它应该返回0行,因为没有USER_ID
有ASSET_ID
1,2和4。
如果我通过ASSET_ID
2和3,则应返回USER_ID
1和2,因为这两个USER_ID
都有ASSET_ID
2和3 < / p>
我现在卡住了,因为我无法找到正确的查询结果。
我试过这个:
SELECT DISTINCT ID FROM USER_ASSETS WHERE ASSET_ID IN (1, 2);
但结果是错误的,因为它返回USER_ID 1和2。
我也尝试过:
SELECT DISTINCT ID FROM USER_ASSETS WHERE ASSET_ID = 1 AND ASSET_ID = 2
但是这总是返回0行,因为WHERE子句一次只执行一行。
答案 0 :(得分:2)
您可以尝试这样的事情:
select user_id
from user_assets
where asset_id = 1 or asset_id = 2 ...
group by user_id
having count(distinct asset_id) = (number of assets you are looking for)
demo here显示您所需的输出。
如果(user_id, asset_id)
是一个唯一的密钥,则必须具备明确的要求
答案 1 :(得分:1)
WHERE ASSET_ID IN (1, 2)
与WHERE ASSET_ID = 1 OR ASSET_ID = 2
相同,USER_ID
1和USER_ID
2都有ASSET_ID
= 2的记录,因此{{1} }子句将包括这两行。
WHERE
将失败,因为WHERE ASSET_ID = 1 AND ASSET_ID = 2
没有单行同时包含1和2。
我认为您要问的是如何检索具有ASSET_ID
个全部集合的USER_ID
。在这种情况下,您需要构建一个更复杂的查询:
ASSET_ID
这将返回同时包含SELECT A1.USER_ID
FROM USER_ASSETS AS A1
INNER JOIN USER_ASSETS AS A2
ON A1.USER_ID = A2.USER_ID
WHERE A1.ASSET_ID = 1 AND A2.ASSET_ID = 2
1和USER_ID
的所有ASSET_ID
值.2。您可以添加尽可能多的ASSET_ID
条款和其他INNER JOIN
条件您需要的An.ASSET_ID
子句。