gpt4 book ai didi

mysql - 如何在同一个查询中返回多个结果?

转载 作者:行者123 更新时间:2023-11-29 05:50:10 26 4
gpt4 key购买 nike

我写了一个查询来检查 team 是否更新。检查更新的条件是:如果team的字段update_at距离当前日期大于7天,则记录需要更新,例如:

id | name     | update_at
67 Tirana 2019-03-06 11:00:12
68 Partizan 2019-03-06 11:02:04
69 Lusitanos 2019-03-14 09:00:40

SELECT id
FROM team
WHERE update_at < DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
AND id IN (67, 68, 69);

查询正常,实际上上面的结果是:67、68,因为记录69已经更新了(不符合条件)。

现在假设我要查找的记录在数据库中不存在,查询将不会返回它(这很好),但是我如何检查是否需要添加而不是更新记录?例如:

id | name     | update_at
67 Tirana 2019-03-06 11:00:12
68 Partizan 2019-03-06 11:02:04
69 Lusitanos 2019-03-14 09:00:40

SELECT id
FROM team
WHERE update_at < DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
AND id IN (67, 68, 69, 70);

结果甚至是 67、68。但是与第一个示例相反,这里记录 70 不存在,所以我怎么知道使用一个查询?

是否可能返回两个结果,例如record_to_updaterecord_to_add

最佳答案

您需要使用派生表或类似逻辑的LEFT JOIN。例如:

SELECT tt.team_id
FROM (SELECT 67 as team_id UNION ALL SELECT 68 UNION ALL
SELECT 69 UNION ALL SELECT 70
) tt LEFT JOIN
team t
on t.id = tt.team_id AND
update_at >= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
WHERE t.id IS NULL;

Here是一个数据库<> fiddle 。

编辑:

如果你想检查 updateinsert,你可以这样做:

SELECT tt.team_id,
(CASE WHEN t.id IS NULL THEN 'INSERT'
ELSE 'UPDATE'
END) as what_to_do
FROM (SELECT 67 as team_id UNION ALL SELECT 68 UNION ALL
SELECT 69 UNION ALL SELECT 70
) tt LEFT JOIN
team t
on t.id = tt.team_id
WHERE t.id IS NULL OR
t.update_at < DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY);

Here是对应的db<>fiddle.

顺便说一句,这是一个有趣的案例,其中使用了 LEFT JOIN,但是对第二个表的过滤是在 WHERE 子句中,而不是 ON 子句。

关于mysql - 如何在同一个查询中返回多个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55196469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com