2017-08-02 12 views
0

ネストされたSelect文を使用してテーブル1の結果を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 

表2.COLZとtable3.COLXは、エントリの一致に使用されるIDです。これらのいずれかが最終結果で要件を満たすことになります。

編集(さらに私のテーブルの構造を説明する)

table1 
COL1|COL2|COL3 

table2 
COl1|START_HOUR|END_HOUR|COLZ 

table3 
COLX|COLY 

COLXは表3のIDがテーブルにCOLZと一致する2

COL1表にCOL1と一致するように、テーブル2のIDに1

私が必要

結果は、

table3.COLX

table1.COL1、table1.COL2、table1.COL3、table2.COl1、table2.COLZある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

関連する問題