SQL-запрос с условием WHERE, допускающим пустые поля - PullRequest
0 голосов
/ 19 марта 2019

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

У меня есть этот запрос:

SELECT EQUIPO.EQUI_SERIE
FROM EQUIPO
     LEFT JOIN ASIGNACION ON EQUIPO.EQUI_SERIE = ASIGNACION.EQUI_SERIE
WHERE ASIG_ACTIVA = 'No'
ORDER BY EQUI_SERIE ASC;

Мне бы хотелось, чтобы отображались все элементы из таблицы EQUIPO, на которые есть или нет ссылки в таблице ASIGNACION, и, если на них есть ссылки, я бы хотел, чтобы на экране отображались только те элементы, которые имеют значение «Нет». ASIG_ACTIVA столбец. Я пробовал разные вещи, но я не могу найти то, что мне нужно из Интернета. Любая помощь будет высоко ценится.

Ответы [ 4 ]

2 голосов
/ 19 марта 2019

изменить условие соединения добавить ASIG_ACTIVA = 'No' при соединении

SELECT EQUIPO.EQUI_SERIE
FROM EQUIPO
     LEFT JOIN ASIGNACION ON EQUIPO.EQUI_SERIE = ASIGNACION.EQUI_SERIE
 and ASIG_ACTIVA = 'No'

ORDER BY EQUI_SERIE ASC;
1 голос
/ 19 марта 2019

Предположение , что ASIG_ACTIVA - это столбец в таблице ASIGNACION, а не EQUIPO (поэтому псевдонимы важны). если это так, переместите WHERE в ON

SELECT E.EQUI_SERIE
FROM EQUIPO E
     LEFT JOIN ASIGNACION A ON E.EQUI_SERIE = A.EQUI_SERIE
                           AND A.ASIG_ACTIVA = 'No'
ORDER BY E.EQUI_SERIE ASC;
1 голос
/ 19 марта 2019

Вы можете сделать это, ограничив свою объединенную таблицу.

SELECT EQUIPO.EQUI_SERIE
FROM EQUIPO
  LEFT JOIN ASIGNACION ON EQUIPO.EQUI_SERIE = ASIGNACION.EQUI_SERIE
                      AND ASIGNACION.ASIG_ACTIVA = 'No'
ORDER BY EQUI_SERIE ASC;

Добавляя AND к вашему объединению, вы ограничиваете объединенную таблицу ASIGNACION только строками, которые имеют no в столбце ASIGN_ACTIVE
Это даст вам все строки в ASIGNACION, которые связаны и имеют no в качестве значения.
Поскольку это левое соединение, вы также получаете NULL для каждой строки, которая либо не связана, либо имеет yes в качестве значения.

0 голосов
/ 19 марта 2019

Как дополнение к другим ответам, я объясню вам, почему ваш запрос не работает так, как вы хотите, вы получили следующее:

SELECT EQUIPO.EQUI_SERIE
FROM EQUIPO
     LEFT JOIN ASIGNACION ON EQUIPO.EQUI_SERIE = ASIGNACION.EQUI_SERIE
WHERE ASIGNACION.ASIG_ACTIVA = 'No'
ORDER BY EQUIPO.EQUI_SERIE ASC;

Проблема в том, чтоПредложение where фильтрует те значения, для которых ASIGNACION.ASIG_ACTIVA имеет значение NULL (на основе LEFT JOIN), и, как я понял, вам нужны записи со значением NULL или «Нет».Таким образом, вы можете использовать приведенные выше решения или просто добавить к предложению where: «ИЛИ ASIGNACION.ASIG_ACTIVA IS NULL», получив следующее:

SELECT EQUIPO.EQUI_SERIE
FROM EQUIPO
     LEFT JOIN ASIGNACION ON EQUIPO.EQUI_SERIE = ASIGNACION.EQUI_SERIE
WHERE ASIGNACION.ASIG_ACTIVA = 'No' OR ASIGNACION.ASIG_ACTIVA IS NULL
ORDER BY EQUIPO.EQUI_SERIE ASC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...