SQL Server 2008查找用户

时间:2012-03-20 02:35:27

标签: sql sql-server

我对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吗?

1 个答案:

答案 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