2017-04-16 186 views
0

我遇到了从(伪)完全连接获取正确结果的问题。所以我创建了一个示例表来说明问题。我创建了一个测试数据库(TESTDB)两个表如下:MySQL完全加入Where子句给出不正确的结果

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

enter image description here

现在,我使用下面的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' 

这应该给我一个行,但实际上给了我两个好像被忽略的条件(见下文)。 enter image description here

我的语法有问题吗?

+0

这是你的设计。修复'MyTable'的表结构来存储转换后的值 – GurV

+0

@GurV不确定你的意思。这是一个简单的结构,应该适用于任何查询。 – Chiwda

回答

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' 
+0

Thanx!这工作! – Chiwda