MySQL合并来自同一行中不同表的列

时间:2017-08-02 07:49:52

标签: mysql select merge nested

我使用嵌套的Select语句从表1获得单行结果,我需要在同一行末尾的表3中追加另一列(COLX)。 我试过UNION,但结果是2行。有什么建议吗?

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,以匹配表2中的COLZ

表2的ID中的COL1与表1中的COL1相匹配

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

其中WHERE table3.COLY = 12345

1 个答案:

答案 0 :(得分: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

我没有尝试过此代码,因此可能会出现一些错误。