SQL NOT LIKE, возвращающий все строки вместо различий - PullRequest
1 голос
/ 23 мая 2019

У меня есть две таблицы, с 2 ПК. Таблица 1 имеет 478 записей. Поле 1 является уникальным идентификатором только для этой таблицы. Поле 2 таблицы 1 является идентификатором (используется совместно с таблицей 2), а 3-е поле является полем категории. Идентификаторы из поля 2 могут повторяться в таблице, но у меня не может быть идентификатора + категории дважды.

У меня есть вторая таблица, которая содержит 757 записей. У него есть столбец идентификатора и столбец категории (например, таблица1), и я хочу знать, какие записи из таблицы 1 включены в таблицу 2. На данный момент я просто проверяю, какие идентификаторы включены в обе таблицы (я хочу очистить базы данных, чтобы я мог использовать AND запрос для получения ID + категории)

Мой запрос SQL не возвращает желаемый результат. Когда я делаю

SELECT DISTINCT(table1.field1) FROM table1, table2 WHERE table1.ID = table2.ID;

Я получаю все результаты, которые совпадают, но когда я делаю обратное

SELECT table1.field1 FROM table1, table2 WHERE table1.ID != table2.ID;

SQL дает все строки из таблицы 1, когда ожидаемый результат будет

всего строк из таблицы 1 - идентификаторы, совпадающие с теми, что в таблице 2

Я пытался инвертировать порядок, в котором запрос отображается как:

SELECT table1.field1 FROM table1, table2 WHERE table2.ID != table1.ID; Но затем происходит цикл, и я получаю 36000+ результатов, что, конечно, невозможно (я представляю, что проверка таблицы с большими записями по сравнению с таблицей меньших размеров делает цикл с одним циклом снова и снова, и я вижу, что получаю полную таблицу все время, цикл Xtimes478, следовательно, 36000+ результатов).

Я проверил этот сопоставленный / несопоставленный запрос, используя R (только для тестирования), и я получил 170 совпадений (которые я могу получить в SQL) и 308 «не совпадающих» результатов (170 + 308 = 478, поэтому я представляю, что это делает смысл, даже если я использую R вместо правильной системы реляционных баз данных)

Как я могу искать несопоставленные идентификаторы в запросе, а не проверять их и вычитать из общего числа? Как получить 308 записей, которые не совпадают?

1 Ответ

0 голосов
/ 23 мая 2019

Если вам нужны значения в таблице 1, которых нет в таблице 2, используйте not exists или что-то подобное:

select t1.*
from table1 t1
where not exists (select 1 from table2 where t2.id = t1.id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...