2017-04-16 162 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