Как решить этот оператор запроса?

Пожалуйста, помогите мне решить эту инструкцию SQL. Я провел несколько дней с этой проблемой.

Я использую SQL Server 2012.

Уровень = N'First' -- я использую текст Unicode

SELECT ss.id,
       ss.SID,
       CONCAT(CONCAT(ss.Name, ' '), ss.Surname) AS Sname,
       ss.Level,
       pp.PID,
       CONCAT(CONCAT(pp.Name1, ' '), pp.Name2) AS Pname,
       ss.Chk
FROM tb_student1 AS ss,
     tb_parent AS pp
WHERE ss.ParentID = pp.PID
  AND ss.Level = N'First'
  AND ss.Chk = 1
  AND NOT EXISTS (SELECT st.SID
                         FROM (SELECT s.id,
                                      s.SID,
                                      CONCAT(CONCAT(s.Name, ' '), s.Surname) AS Sname,
                                      p.PID,
                                      CONCAT(CONCAT(p.Name1, ' '), p.Name2) AS Pname,
                                      s.Chk
                               FROM tb_student1 AS s,
                                    tb_parent AS p
                               WHERE s.ParentID = p.PID
                                 AND s.Level = N'First'
                                 AND s.Chk = 1) AS st ,
                              (SELECT * FROM tb_New_Reg AS r) AS rnp
                         WHERE st.SID = rnp.SID
                           AND rnp.ClassID = 'C104'
                           AND rnp.Year = '2018-2019'
                           AND rnp.Term = 'Jan'
                           AND rnp.Level = N'First'
                           AND st.Chk = 1);

Если я использую (... и ss.SID не существует...) ошибка здесь. Если я использую (... и не существует....), верните null

Первый запрос содержит 11 строк, подзапрос содержит 6 строк.

Как с этим решить?

Табличные данные и ожидаемые результаты помогут вашему посту.

Ryan Wilson 28.05.2019 17:46

Кажется, вы пытаетесь использовать EXISTS как IN, но затем ваш EXISTS возвращает 3 столбца и не имеет бокового соединения? Также пришло время присоединиться к остальным и перестать использовать синтаксис, который устарел уже 27 лет: Плохие привычки, от которых нужно избавляться: использование JOIN в старом стиле

Larnu 28.05.2019 17:48

Я хочу, чтобы НЕ СУЩЕСТВУЕТ в подзапросе. Я пробовал NOT IN, но ошибка возникает с EXISTS

Verdone Yang 28.05.2019 17:51

Пожалуйста, помогите мне, я провожу много дней только с этим делом.

Verdone Yang 28.05.2019 17:58

Два запроса должны коррелировать?

shawnt00 28.05.2019 18:02

SID — это одно и то же значение, а другие значения независимы.

Verdone Yang 28.05.2019 18:05
Плохие привычки, от которых нужно избавляться: использование JOIN в старом стиле — этот старый стиль список таблиц через запятую был заменен синтаксисом правильный ANSI JOIN в стандарте SQL ANSI-92 (более 25 лет назад), и его использование не рекомендуется.
marc_s 28.05.2019 18:06

Независимые значения, которые я поместил в «...», отмечены

Verdone Yang 28.05.2019 18:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
8
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
WITH data AS (
    SELECT
        ss.id, ss.SID,
        CONCAT(CONCAT(ss.Name, ' '), ss.Surname) AS Sname,
        ss.Level, pp.PID,
        CONCAT(CONCAT(pp.Name1, ' '), pp.Name2) AS Pname,
        ss.Chk
    FROM tb_student1 AS ss INNER JOIN tb_parent AS pp ON ss.ParentID = pp.PID
    WHERE ss.Level = N'First' AND ss.Chk = 1
)
SELECT * FROM data AS s
WHERE NOT EXISTS (
    SELECT * FROM tb_New_Reg AS rnp
    WHERE s.SID = rnp.SID
        AND rnp.ClassID = 'C104'
        AND rnp.Year = '2018-2019'
        AND rnp.Term = 'Jan'
        AND rnp.Level = N'First'
);

Я думаю, что это соответствует тому, что вы ищете. Я разбил ваш основной запрос на CTE, думая, что буду дублировать тот же запрос внутри подзапроса. Оказывается, это, вероятно, не было действительно необходимо, но я оставил это так.

Я предполагаю, что ваша попытка не удалась, потому что внутренний запрос выполняет поиск по всей таблице, тогда как на самом деле вы намеревались сузить этот поиск до соответствующего SID из внешнего запроса. Возможно, вам будет полезно поискать коррелированный подзапрос для лучшего понимания концепции.

Это хорошо сделано. @shawnt00, миллиард благодарностей, я сделал это с тобой, моя память.

Verdone Yang 28.05.2019 18:17

Я также сделал со стилем соединения, приведенным выше комментарием @Larnu. Миллиард спасибо всем.

Verdone Yang 28.05.2019 18:20

Другие вопросы по теме