Логика SQL-запроса - PullRequest
0 голосов
/ 11 мая 2018

Мой запрос не работает логически. Я пытаюсь получить список студентов, которые изучали любой курс AutoCAD, кто не изучал какой-либо курс Revit. Мой запрос структурирован так:

Select * From StudentData 
Where (CourseName LIKE 'AutoCAD%') 
AND NOT EXISTS (Select * From StudentData Where (CourseName LIKE 'Revit%'));

Выполнение инверсии EXISTS дает мне список тех, кто изучал оба AutoCAD + Revit, но NOT не возвращает никакого значения.

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Используйте NOT IN вместо. Попробуйте:

  SELECT *
FROM StudentData
WHERE (CourseName LIKE 'AutoCAD%')
    AND CourseName NOT IN (
        SELECT CourseName
        FROM StudentData
        WHERE (CourseName LIKE 'Revit%')
        )
0 голосов
/ 11 мая 2018

Пожалуйста, попробуйте ниже одного

Select * From StudentData sd1
Where CourseName LIKE 'AutoCAD%'
AND NOT EXIST (SELECT * FROM From StudentData sd2 WHERE sd1.Id = sd2.Id and CourseName LIKE 'Revit%')
0 голосов
/ 11 мая 2018

Попробуйте это:

Select 
    * 
From 
    StudentData sd
Where 
    (
      CourseName LIKE 'AutoCAD%'
    ) 
AND NOT EXISTS 
    (
        Select 
            * 
        From 
            StudentData sd2 
        Where 
            sd2.CourseName LIKE 'Revit%' 
        AND sd.StudentName = sd2.StudentName
    )

Вы пропустили сравнение идентификаторов из обеих таблиц. Поскольку на курсе «Revit%» будет хотя бы 1 студент, условие NOT EXISTS всегда будет не выполнено для всех студентов.

***** Демо (с образцами данных) *****

http://sqlfiddle.com/#!9/9a0c05/2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...