mysql - 根据先前查询的结果在 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 编程新手。任何帮助表示赞赏。提前致谢。
解决方案
我将差异解释为仅存在于select
-- 所以第二个查询是指table1
自始至终,而不是table2
.
如果是这样,你想要一个LEFT JOIN
:
SELECT t1.*, COALESCE(qty, 0)
FROM table1 t1 LEFT JOIN
temp_table tt
ON t1.id = tt.table1_id;
推荐阅读
- python - 异常处理错误
- reactjs - React Meteor withTracker数据到达后如何执行函数?
- php - Symfony 3 预填充 FileType 字段
- rest - 为什么在 RESTful 服务中使用 HTTP 响应代码来指示业务相关逻辑?
- jakarta-ee - 每个集群实现的 Payara 单例
- oauth - 登录 shopify 后 OAuth 请求重定向到管理仪表板
- android - 使用棉花糖设备从 SD 卡上传 pdf 文件在 Android 应用程序中不起作用。但从手机内存中工作正常
- python - + 不支持的操作数类型:“project”和“int”
- php - Wordpress - 无限滚动的自定义分页
- hadoop - 未找到:org.apache.hadoop.security.authentication.util.KerberosUtil