Mysql Сравнить два столбца разных таблиц

haxyn

Новичок
Добрый день,

Есть две таблицы и у обоих есть колонка содержащая ID третей таблицы.
Данные в них разные и общего у них только эта колонка.
И мне надо сравнить эти колонки и найти ID которые в одной таблице есть, а в другой нет.

Конечно можно тупо закрутить цикл в PHP и сравнить их,
но вдруг кто-то знает хитрый MySQL запрос который сделает это за меня.

Достаточно ссылки на мануал или гугло-слово.
 

С.

Продвинутый новичок
А причём здесь JOIN?
Надо получить список значений которые есть в одной таблице, но нет в другой,
разницу между двумя столбцами, а не объединить их данные в один результат.
Ты наверное путаешь JOIN и UNION.
 
Последнее редактирование:

haxyn

Новичок
Да похоже то что надо, но не могу правильно написать условие.
LEFT JOIN покажет поля отсутствующих индексов как NULL

SELECT * FROM test1 LEFT JOIN test2 on test1.id=test2.id

ID name ID name2
1 - aaa -|-1 - zzz
2 - bbb -|-2 - xxx
3 - ccc -|-3 - yyy
4 - ddd -|-4 - qqq
5 - eee -|-NULL - NULL
6 - fff -|-NULL - NULL
7 - ggg -|-NULL - NULL
8 - hhh -|-NULL - NULL
А как сделать так чтобы он показал только NULL, т.е. ID 5, 6, 7 и 8
 

haxyn

Новичок
Спасибо,

До where я додумался только пытался через знак =,
а надо было чере IS, так что теперь разобрался.
SELECT * FROM test1 LEFT JOIN test2 ON test1.id=test2.id where test2.id IS NULL
 

haxyn

Новичок
По началу всё замечательно работало,
но теперь таблица Тест1 имеет 6000 записей,
а таблица Тест2 50000 и этот запрос занимает несколько минут.

Как можно это ускорить? Ключи? Индексы? ... я в SQL не силён.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Да, ключи, индексы. Смотреть оператор EXPLAIN
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
а зачем тут с join'ами вообще связываться?
Код:
SELECT id_третьей_таблицы FROM первая_таблица
EXCEPT
SELECT id_третьей таблицы FROM вторая_таблица;
если, кнэшно, в мыскле EXCEPT уже сделали
 

haxyn

Новичок
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE way_bills index NULL PRIMARY 4 NULL 6319 Using index
1 SIMPLE transactions ALL NULL NULL NULL NULL 74237 Using where; Not exists
и чего это значит? Нужно добавить индекс на вторую таблицу?
 

peektoseen

Новичок
А так?:

PHP:
SELECT id FROM table1 WHERE id NOT IN (SELECT id FROM Table2)
 
Последнее редактирование:

haxyn

Новичок
Спасибо Peektoseen,

Я уже решил проблему и просто забыл отписаться.
Добавил индекс на ID во второй таблице и время выполнения упало с нескольких минут до 0.0157 секунд.
 
Сверху