Oracle SQL: проверьте, существует ли запись, и верните ее, если она НЕ - PullRequest
0 голосов
/ 23 октября 2019

Я хочу проверить, существует ли запись в одной таблице на основе значения из 2-й таблицы, но если она НЕ существует, выберите значение из 2-й таблицы.

Чтобы объяснить, у меня естьтаблица с именем devices и таблица с именем tests. Каждое устройство в devices имеет уникальный идентификатор (целое число). Каждый тест в tests ссылается на уникальный идентификатор устройства, на котором был запущен тест. Следовательно, каждый test связан с device. Однако не каждый device был проверен. Более того, несколько тестов могли быть выполнены на одном устройстве.

Итак, я хочу SELECT - это все записи в devices, на которые НЕ ссылается хотя бы одна запись в tests.

Ответы [ 3 ]

4 голосов
/ 23 октября 2019

Итак, что я хочу ВЫБРАТЬ, это все записи в устройствах, на которые НЕ ссылается хотя бы одна запись в тестах.

Предполагая следующие структуры данных:

devices(id)
tests(id, device_id)

Вы можете использовать not exists:

select d.*
from devices
where not exists (
    select 1
    from tests t
    where t.device_id = d.id
)

Или антипаттерн левого соединения:

select d.*
from devices d
left join tests t on t.device_id = d.id
where t.id is null
0 голосов
/ 23 октября 2019

Спасибо, это сработало. Признаюсь, я изменил названия своих таблиц выше, чтобы было легче задавать вопрос, но вот что я закончил, и он работает правильно:

SELECT DEVICE.ID
FROM DEVICE
WHERE DEVICE.ID NOT IN (
SELECT TEST.DEVICEID FROM TEST WHERE TEST.DEVICEID=DEVICE.ID)
ORDER BY DEVICE.ID

Простой в конце. Не можете сказать, что я новичок в SQL, не так ли? :)

0 голосов
/ 23 октября 2019

Вы можете использовать простое NOT IN для достижения желаемого результата (при условии id в качестве уникального идентификатора в devices, device_id в качестве внешнего ключа для devices.id в tests и tests.device_idимеет атрибут NOT NULL:

SELECT *
FROM devices
WHERE id NOT IN (
    SELECT DISTINCT device_id
    FROM tests
);

Это должно работать в большинстве основных СУБД ', поскольку вы не указали, какую из них используете, ваш пробег может отличаться.

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