我对sql查询有疑问。
我正在尝试查询具有所有枪类型时间的用户。例如。
我有桌子
项。
|itemid |item_name|
| 1 | GunBow |
| 2 | GunLong |
| 3 | GunShot |
|4 | SwordSm |
|5 | SwordLg |
|6 | Cannon |
我有桌子
userinventory
|used_id | name_item |
|1 | GunBow |
|1 | GunLong |
|1 | GunShot |
| 2 | GunBow |
|2 | SwardLg |
| 2 | Cannon |
| 3 | GunBow |
| 3 | GunShot |
由于用户“1”拥有所有枪支,我想进行返回用户1的查询。
我做的是......
Create Table #tmp(
Classname [varchar](50) NOT NULL
)
INSERT INTO #tmp SELECT DISTINCT iteam_name
FROM ITEM WHERE item_name like 'Gun%'
然后....我想比较找到拥有所有项目的用户..
但是,我不确定该怎么做...因为我不能使用计数或任何攻击
无论如何都知道他们找到拥有全部枪支的用户ID吗?
答案 0 :(得分:2)
SELECT Q.user_id
FROM
(
SELECT DISTINCT item_name FROM item WHERE item_name LIKE 'Gun%'
) P,
(
SELECT DISTINCT X.name_item,Y.user_id
FROM userinventory X,
(SELECT user_id,COUNT(DISTINCT name_item) as count_guns_userid
FROM userinventory
WHERE name_item LIKE 'Gun%'
GROUP BY user_id
)Y
WHERE X.user_id=Y.user_id
) Q
WHERE P.item_name=Q.name_item
GROUP BY Q.user_id
HAVING COUNT(Q.name_item)=3;
在SQL Fiddle上查看解决方案 - http://sqlfiddle.com/#!3/d10b2/1