MySQL 将不同表中的列合并到同一行中

标签 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 匹配

我需要的结果是 表1.COL1,表1.COL2,表1.COL3,表2.COl1,表2.COLZ,表3.COLX

其中 WHERE table3.COLY = 12345

最佳答案

如果我没看懂的话,你的 table2.COLZ 和 table3.COLX 是与表 1 匹配的 ID;

所以你应该做一个 join 语句。类似这样的事情:

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

我还没有尝试过这段代码,所以它们可能有一些错误。

关于MySQL 将不同表中的列合并到同一行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45454666/

相关文章:

java - 使用单个 "update"JButton 将测试表的 auto_increment 值插入到分数表表中

mysql - 如何避免这种重复?

php - mysql_fetch_array 不会呈现 SQL 查询的期望值

html - 选择标签不显示在我的表单上

image-processing - 如何拆分和合并错误分割的区域

image - 在 mercurial 中处理图像(bmp、png、jpg 等)文件 merge 冲突

mysql - 按最完整的行排序

mysql - 对于小型 Web 项目,MySQL 或 Oracle 哪个更快?

mysql - DIBI子查询-订单、限价订单

r - 在 R : Unused arguments 中合并时出错