Ищем sql, чтобы найти список людей в базе данных, у которых нет определенной строки без использования не существует - PullRequest
1 голос
/ 23 февраля 2010

Легко найти все идентификаторы пользователей, которые имеют trait.color = "green", но мне нужно найти всех людей, которые этого не делают. Очевидным способом является выборка для всех идентификаторов, где не существует (выберите идентификатор, где trait.color = "green") но я пытался подумать, есть ли способ сделать это без подвыбора. Есть какой-то трюк, о котором я не знаю?

Sybase 12,5 Внешних ключей нет, но таблица является отношением один ко многим. Просто представьте себе простое

ID   trait
--   -----
1    yellow
1    green
1    blue
2    yellow
2    blue
2    black
3    yellow
3    green
3    black

Ответы [ 3 ]

4 голосов
/ 23 февраля 2010

NOT EXISTS наиболее эффективен на SQL Server ... просто сделайте это: -)

...MyTable M where not exists (
   select id FROM trait T where T.color = 'green' AND T.key = M.key)
2 голосов
/ 23 февраля 2010

Если таблица «Пользователь» имеет отношение «один ко многим» с таблицей «Черты», то NOT EXISTS, скорее всего, ваш лучший ответ.

Вы также можете попробовать отдельное предложение с левым соединением и trait.userid = NULL

SELECT Distinct Users.UserId
FROM USERS
    LEFT JOIN (SELECT * FROM Traits Where Color = 'GREEN') GreenTraits
        ON Users.UserId = GreenTraits.UserId
WHERE 1=1
AND GreenTraits.UserId = NULL
0 голосов
/ 23 февраля 2010

Присоединитесь к UserID, где trait.color <> "green"?

...