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'
我在从(伪)完全联接中获取正确结果时遇到问题。所以我创建了一个示例 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'