MySQL Full Join с предложением Where, дающим неверные результаты

У меня проблема с получением правильных результатов (псевдо) полного соединения. Поэтому я создал образец таблицы, чтобы проиллюстрировать проблему. Я создал тестовую базу данных (TestDB) с двумя таблицами следующим образом:

CREATE TABLE `TestDB`.`MyTable` ( `Leg1` VARCHAR(10) NOT NULL , `Leg2` VARCHAR(10) NOT NULL , `Leg3` VARCHAR(10) NOT NULL ) ENGINE = InnoDB;

CREATE TABLE `testdb`.`MyChair` ( `Back1` VARCHAR(10) NOT NULL , `Back2` VARCHAR(10) NOT NULL , `Back3` VARCHAR(10) NOT NULL ) ENGINE = InnoDB;

(:-P) и поместите туда некоторое значение следующим образом:

MyTable

MyTable

и MyChair

введите описание изображения здесь

Теперь я использую следующий оператор SQL:

SELECT * FROM `mychair` LEFT JOIN `mytable` ON mytable.Leg1 = mychair.Back1 
UNION
SELECT * FROM `mychair` RIGHT JOIN `mytable` ON mytable.Leg1 = mychair.Back1
WHERE mytable.Leg1 = 'A'

Это должно дать мне одну строку, но на самом деле дает мне две, как будто условие игнорируется (см. Ниже). введите описание изображения здесь

Есть ли проблема с моим синтаксисом?

1 ответ

Решение

Я думаю, это то, что вы пытаетесь сделать. Последнее условие where используется только для правой части соединения, а не для всего запроса. Использовать этот

Select * from (
SELECT * FROM `mychair` LEFT JOIN `mytable` ON 
mytable.Leg1 = mychair.Back1 
UNION
SELECT * FROM `mychair` RIGHT JOIN `mytable` ON 
 mytable.Leg1 = mychair.Back1) t
WHERE t.Leg1 = 'A'
Другие вопросы по тегам