首页 > 解决方案 > 根据先前查询的结果在 MySQL 中运行不同的 SELECT 命令

问题描述

假设我的数据库中有两个表:table1 和 table2。Table1 有一列存储一个 ID,该 ID 引用 table2 中具有该 ID 的记录。

现在我将选择一些记录并将它们存储在一个临时表中以供将来参考:

CREATE TEMPORARY TABLE IF NOT EXISTS temp_table AS (
SELECT table1.table2_id, SUM(table1.quantity) AS qty
FROM table1
WHERE table1.table2_id IN (SELECT table2.id FROM table2)
GROUP BY table1.table2_id
);

这个查询的作用对于我稍后要问的问题并不重要。所以,不要花太多时间去理解它。我把它包括在这里只是为了完整性。

显然,该查询要么根本不返回任何记录,要么返回一些记录。

如果它没有返回任何记录,我想运行我的第二个查询,如下所示

SELECT table1.*, 0 
FROM table2 INNER JOIN temp_table
ON table2.id = temp_table.table2_id;

否则,如果我的查询返回了一些记录,我想运行这个使用临时表中的列“qty”的查询:

SELECT table1.*, qty
FROM table2 INNER JOIN temp_table
ON table2.id = temp_table.table2_id;

所以,这是我的问题:我正在寻找一个 MySQL 解决方案,它首先运行第一个查询,然后根据它是否返回某些内容,运行第二个或第三个查询。

我尝试按照 MySQL 文档使用 IF ELSE 语句,但它说Unrecognized statement type. (near "IF" at position 0). 我是 SQL 编程新手。任何帮助表示赞赏。提前致谢。

标签: mysqlsql

解决方案


我将差异解释为仅存在于select-- 所以第二个查询是指table1自始至终,而不是table2.

如果是这样,你想要一个LEFT JOIN

SELECT t1.*, COALESCE(qty, 0)
FROM table1 t1 LEFT JOIN
     temp_table tt
     ON t1.id = tt.table1_id;

推荐阅读