Я использую MS SQL Server, и я изо всех сил пытаюсь найти все реле «In Service» (таблица TRELAY), у которых нет «Active «Настройка запросов (таблица TREQUEST).SQL-запрос для получения записи из первой таблицы, которая не имеет соответствующего подзапроса во второй таблице
TRELAY имеет отношение ко многим отношениям с TREQUEST. Записи в TREQUEST могут иметь различные статусы («Не готов», «Ожидание», «Актив», «Заменено»).
Я пробовал подзапросы и соединения (слева/слева), но я не могу получить запрос, чтобы вернуть отдельную запись ретрансляции без активных записей запроса настроек. Он возвращает повторяющиеся записи Relay со всеми дублирующимися запросами на замещение.
Я пытался использовать Не как «Активный», но я получаю несколько записей релейных записей.
T.S06 is the Status from the TRELAY table (string field)
R.S03 is the Setting Status from the TREQUEST tabe (string field)
SELECT T.ID, T.S06, R.S03 FROM TRELAY T
LEFT JOIN TREQUEST R ON R.RELAYID = T.ID AND R.S03 NOT LIKE '%ACTIVE%'
WHERE T.S06 LIKE '%IN SERVICE%'
Результат вышеупомянутого запроса:
Relay ID || Status || Setting Status
========================================
303 || In Service || Superseded
307 || In Service || Superseded
307 || In Service || Superseded
307 || In Service || Superseded
Я признателен за любую помощь вы можете предоставить. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Спасибо, Joe C.
Ваш запрос, вероятно, будет работать, если вы просто изменили свой SELECT на 'SELECT DISTINCT', чтобы он захватывал только уникальные строки. – Santi
Не повезло с отличием. Он удалил один из ID Relay 307, но все же вернул 2 из них. –
Я вижу. Затем взгляните на ответ AdaTheDev. На самом деле, как правило, лучше избегать «LIKE» только для эффективности. «НЕ СУЩЕСТВУЮЩИЕ» могут быть правильной методологией здесь. – Santi