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
и 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'