Сравнение двух таблиц MySQL

372
11 апреля 2017, 09:39

Как сделать тоже самое на примере MySQL? Как я понимаю, MySQL не поддерживает FULL OUTER JOIN.

SELECT table1.id, table2.id FROM table1  
FULL OUTER JOIN table2 ON table1.id = table2.id  
WHERE table1.id IS NULL OR table2.id IS NULL;
Answer 1

Mysql умеет выполнять любой join только через nested loops. Поэтому full outer join в самом mysql отсутствует вообще, через nested loops full outer join не выполнить.

full outer join от left join отличается добавлением строк, которые есть только в правой таблице. Ну вот эти строки можно добавить через union вторым запросом. Поэтому для вашего запроса эквивалент можно собрать так:

SELECT table1.id, table2.id FROM table1  
LEFT JOIN table2 ON table1.id = table2.id  
WHERE table2.id IS NULL
union all
SELECT table1.id, table2.id FROM table2  
LEFT JOIN table1 ON table1.id = table2.id  
WHERE table1.id IS NULL;
Answer 2

FULL OUTER JOIN в большинстве случаев можно заменить UNION с расстановкой данных в нужные колонки и группировкой по общему полю. В вашем случае это будет выглядеть так:

select max(id1),max(id2)
  from (
        select id,id as id1,NULL as id2 from table1
        union all
        select id,NULL,id from table2
       ) A
 group by id
having max(id1) is null or max(id2) is null

Но если вы хотите получить все уникальные данные для вставки в другую таблицу, то не понятно, зачем вам нужна выборка в две отдельные колонки, запрос получения уникальных данных в одну колонку был бы проще...

Для случая, что в исходных таблицах id уникальны, это выглядело бы так:

select id
  from (
        select id from table1
        union all
        select id from table2
       )
  group by id
 having count(1)=1
READ ALSO
mysql и одновременные обращения

mysql и одновременные обращения

при написании запросов к базе данных Mysql, возник вопросЯ получаю последнюю запись в бд, выбираю инкрементный ID(первичный ключ), потом увеличиваю...

257
MySQL: ORDER BY перед GROUP BY

MySQL: ORDER BY перед GROUP BY

такая ситуация: есть две таблицы: одна с товарами, другая таблица с ценами на них у поставщиков, те

277
PHP Как подключиться БД MySql?

PHP Как подключиться БД MySql?

Что я делаю не так

255
GET-параметр страницы

GET-параметр страницы

Возник такой вопрос, у меня страница профиля пользователя определяются GET параметром ( sitecom/profile

225