2017-08-02 133 views
0

我使用嵌套的Select語句從表1中獲取單個行結果,我需要在同一行的末尾附加表3中的另一列(COLX)。 我試過UNION,但結果是2行。有什麼建議麼?MySQL從同一行中的不同表中合併列

SELECT COL1,COL2,COL3 
FROM `table1` 
where COL1 IN ( 
    SELECT table2.COL1 FROM `table2` 
    where table2.START_HOUR <= HOUR(NOW()) 
    AND 
    table2.END_HOUR > HOUR(NOW()) 
    AND 
    table2.COLZ IN (
    SELECT IFNULL((SELECT COLX from `table3` WHERE COLY = 12345),'B'))) 
    Limit 1 

table2.COLZ和table3.COLX是用於匹配條目的ID。這些最終結果中的任何一個都能滿足要求。

編輯(進一步解釋我的表結構)

table1 
COL1|COL2|COL3 

table2 
COl1|START_HOUR|END_HOUR|COLZ 

table3 
COLX|COLY 

COLX是表3的ID在表匹配COLZ 2

COL1在表2至表匹配COL1的ID 1

結果我需要的是 table1.COL1,table1.COL2,table1.COL3,table2.COl1,table2.COLZ,table3.COLX

其中WHERE table3.COLY = 12345

回答

0

如果我很好地讀了你的話,你的table2.COLZ和table3.COLX是與表1匹配的ID;

所以你應該做一個加入聲明。類似的東西:

SELECT COL1,COL2,COL3 
FROM `table1` t1 
JOIN (
SELECT table2.COL1, table2.colz FROM `table2` 
    WHERE table2.START_HOUR <= HOUR(NOW()) 
    AND 
    table2.END_HOUR > HOUR(NOW())) 
) t2 on t1.col1 = t2.col1 
JOIN (SELECT IFNULL((SELECT COLX from `table3` WHERE COLY = 12345),'B')) t3 on t3.colx = t2.colz 

我還沒有嘗試此代碼,所以他們可能會有一些錯誤。

+0

正在接收以下錯誤 #1248 - 每個派生表必須具有其自己的別名 – kasai

+0

也許您需要添加一些'as'來爲表別名。我不知道MySql是如何工作的。 – JBO

相關問題