SQL Какие конструкции использовать для выбора сложных логических запросов в одной таблице - PullRequest
0 голосов
/ 17 января 2012

давайте представим, что у меня есть простая таблица, подобная этой:id - идентификатор записиchar_id - идентификатор персонажаlevel_id - идентификатор уровня, доступный для персонажаэто пример содержания:0 1 11 1 2что означает, что персонаж с идентификатором 1 имеет доступ к уровням 1 и 2.Какие ключевые слова или конструкции мне нужно использовать, если я хочу получить:char_id из тех персонажей, которые имеют доступ к любым двум уровням?char_id из тех, кто имеет доступ только к одному уровню и не более?char_id из тех, у кого есть такие же доступные уровни?char_id из тех, у кого доступны разные уровни?

это поражает меня ... кто-нибудь может порекомендовать что-нибудь?

Ответы [ 2 ]

1 голос
/ 17 января 2012

Для первых двух вариантов используйте HAVING:

-- To check for access to levels 1 and 2
SELECT char_id
FROM MyTable
WHERE level_id IN (1,2)
GROUP BY Char_Id
HAVING COUNT(*) = 2

-- to check for access to only one (unspecified) level
SELECT char_id
FROM MyTable
GROUP BY Char_ID
HAVING COUNT(*) = 1

Остальные два варианта вам нужно уточнить еще.

Вы хотите только точные совпадения между различными char_ids? Как, например, эти два персонажа имеют доступ к одному и тому же списку уровней?

Последний вариант будет противоположен приведенному выше, если вы решите, что именно вы хотите.

1 голос
/ 17 января 2012

Я бы посоветовал прочитать предложение SQL HAVING , которое должно помочь вам.

...