假设我有多个查询:
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/