【发布时间】:2019-05-02 10:21:18
【问题描述】:
我需要将字段传递给子查询,而不是使用 JOIN,但大多数在线示例仅显示如何使用连接来执行此操作。
场景如下:
我在系统上有一个帐户表。 每个帐户都可以执行任务,这些任务可能会失败。 我想获取一个帐户列表,如果最后两个任务失败,则自定义列“状态”为 -1。
例如
SELECT Account.id, (
CASE WHEN (
(SELECT COUNT(*) FROM (
SELECT id, status FROM Task
WHERE Task.AccountId = Account.id // <-- Cannot access Account.id here
HAVING status < 0 // <-- only select failed tasks
ORDER BY id DESC
LIMIT 2
) as t1)
) < 2 THEN 1 ELSE -1 END
) as `status` FROM Account;
计算每个任务的状态是一个繁重的查询(上面没有显示),所以我只想计算属于查询帐户的任务的状态。
我尝试过使用用户变量,将 Account.id 替换为 @AccountId,但我认为不能在这样的子查询中使用它们。
我无法在主 Account 表上使用 JOIN,因为我正在使用 sequelize。但是,如果有帮助,我可以在子查询中使用 JOIN。
【问题讨论】:
-
我在您的子查询中没有看到 order by。
-
@SalmanA 抱歉,已添加。
-
你的代码没有做你想做的事。
HAVING子句不合适。
标签: mysql sql subquery sequelize.js