MySQL Full Join with Where 子句给出不正确的结果

MySQL Full Join with Where clause giving incorrect results

我在从(伪)完全联接中获取正确结果时遇到问题。所以我创建了一个示例 table 来说明这个问题。我创建了一个包含两个 table 的测试数据库 (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) 并在其中输入一些值,如下所示:

我的表格

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

这应该给我一行,但实际上给了我两行,就好像忽略了条件一样(见下文)。

我的语法有问题吗?

我想这就是你想要做的。最后一个 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'