mysql - 将多个结果与条件结合起来

标签 mysql sql

假设我有多个查询:

SELECT col1, col2 FROM tab1 WHERE col1 = "%abc%";
SELECT colA, colB FROM tab2 WHERE colA = "%123%" AND colB IS NOT NULL;
SELECT colTest, colBlah FROM tab3;

每个查询只会返回 1 个结果。

如何将这 3 个结果合并为 1 个?

结果看起来像这样:

+------+------+------+------+---------+---------+
| col1 | col2 | colA | colB | colTest | colBlah |
+------+------+------+------+---------+---------+
| abc  | def  | Ghi  | JkL  | 12A     | 42BD    |
+------+------+------+------+---------+---------+

suggested here ,我可以使用交叉连接。但是 WHERE 条件应该放在哪里呢?
如果我将它们放在整个查询的末尾,当只有其中一个失败时,我会得到一个空结果。这就是为什么我需要为每个查询单独放置它们。

最佳答案

不确定连接的 id 字段的名称到底是什么,但这些是可能的:

SELECT t1.col1, t1.col2,  t2.colA, t2.colB, t3. colTest, t3.colBlah
FROM tab1 t1
JOIN tab2 t2 On t1.tab1id = t2.tab1id
JOIN tab3 on t1.tab1id = t3.tab1id
WHERE t1.col1 = "%abc%";
            AND t2.colA = "%123%" 
            AND t2.colB IS NOT NULL;

SELECT t1.col1, t1.col2,  t2.colA, t2.colB, t3. colTest, t3.colBlah
FROM tab1 t1
LEFT JOIN tab2 t2 On t1.tab1id = t2.tab1id
LEFT JOIN tab3 on t1.tab1id = t3.tab1id
WHERE t1.col1 = "%abc%";
            AND t2.colA = "%123%" 
            AND t2.colB IS NOT NULL;    

请注意,如果您希望所有三个字段都包含每条记录的数据,请使用第一个查询。如果 tab2 或 tab3 中可能没有数据,则第二个是合适的。如果只有一个可能没有数据,则只需要一个左连接。如果三个表中可能没有数据,则使用完全联接。

关于mysql - 将多个结果与条件结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42370311/

相关文章:

javascript - 当用户观看 mp4 视频时设置在线用户

sql - 最后位置的字符只能被替换 - Hive

MySQL:使用来自不同表的值从组中选择最大值?

php - 如何在 mysql + codeigniter 中按开始时间/结束时间过滤记录

mysql - IF ELSE 语句在 MySQL 中产生无效语法

php - CakePHP updateAll() 不工作

php - foreach mysql查询结果列表

MySQL - 按父位置和子位置排序

java - 在 Java 中构造类的对象并调用其方法

php - 当使用 while ($row = $result->fetch_assoc()) 命令创建表时,如何获取表中任何一个 <tr> 的值?