SQL Server 2005 Поиск пользователя

Возможный дубликат:SQL Server 2005 Как найти пользователя, у которого есть все книги

У меня вопрос о sql-запросе.

Я пытаюсь сделать запрос тем пользователем, у которого есть вся компьютерная книга. Например, у меня есть две таблицы,

1) Таблица позиций

|itemid |item_name |

|1 | computerbook1 |

|2 | computerbook2 |

|3 | computerbook3 |

|4 | mathbook1 |

|5 | mathbook2 |

|6 | physicsbook |

2) таблица userinventory

|used_id | name_item |

|1 | computerbook1 |

|1 | computerbook2 |

|1 | computerbook3 |

|2 | computerbook1 |

|2 | mathbook1 |

|2 | physicsbook |

|3 | computerbook1 |

|3 | computerbook3 |

Поскольку пользователь "1" имеет всю компьютерную книгу, я хотел бы сделать запрос, возвращающий пользователя 1.

То, что я сделал, было...

Create Table #tmp (
 Classname [varchar](50) NOT NULL
)

INSERT INTO #tmp
SELECT DISTINCT item_name 
FROM ITEM
WHERE item_name like 'computerbook%'

Я хотел бы сравнить, чтобы найти пользователя, у которого есть весь предмет.

Тем не менее, я не уверен, как это сделать.. потому что я не могу использовать счет или любую агрессию

Не используйте "count"

В любом случае, они знают, как найти идентификатор пользователя, у которого есть все компьютерные книги?

1 ответ

Здесь вы получите запрос, который просто даст вам пользователей, у которых есть все элементы в категории компьютерных item.itemname (при условии, что item.itemname уникален).

SELECT USER_ID
FROM userinventory u
INNER JOIN item i ON u.name_item=i.item_name
 AND u.name_item LIKE 'computer%'
GROUP BY USER_ID
HAVING COUNT(item_name) = (
 SELECT COUNT(item_name)
 FROM item
 WHERE item_name LIKE 'computer%'
)

Вы можете, конечно, настроить его, чтобы соответствовать любой категории предметов, которые вы хотите.

Вы пытаетесь сделать это для каждой категории в таблице item? Если это так, это будет немного более активно, но возможно.

licensed under cc by-sa 3.0 with attribution.