gpt4 book ai didi

MySQL 优先考虑行是否存在,如果不存在则显示其他内容

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

假设我有 2 个表,表 1 每天包含 1 条记录,表 1 每天包含多条记录,如下所示。

表1

id | date      | number
1 | 01/01/2018 | 14
2 | 02/01/2018 | 2
3 | 03/01/2018 | 82
4 | 04/01/2018 | 61

表2

id | name      | number | winner | username
1 | 01/01/2018 | 1 | 0 | Joe Bloggs
2 | 01/01/2018 | 2 | 0 | Jim Bloggs
3 | 01/01/2018 | 3 | 0 | Sarah Bloggs
4 | 01/01/2018 | 4 | 0 | David Bloggs
5 | 01/01/2018 | 5 | 0 | Sam Bloggs
6 | 02/01/2018 | 1 | 0 | Mark Bloggs
7 | 02/01/2018 | 2 | 1 | Phil Bloggs
8 | 02/01/2018 | 3 | 0 | Steve Bloggs
9 | 03/01/2018 | 1 | 0 | Ben Bloggs
10| 03/01/2018 | 2 | 0 | Bill Bloggs

每当用户参加抽奖时,他们都会获得一个号码。如果该数字与表 1 中他们比赛日期的数字相匹配,则他们获胜,否则他们失败。他们输入的用户名和号码随后会输入到表 2 中,这样我们就有了每个玩过游戏的人的记录。

我需要能够获取所有获奖者的列表(每天 1 个),但如果没有获奖者,则显示日期行,但显示“无获奖者”。

因此,理想情况下,根据上述数据,我的结果将如下所示

id | date      | winner | username
1 | 01/01/2018 | 0 | No Winner
2 | 02/01/2018 | 1 | Joe Bloggs
3 | 03/01/2018 | 0 | No Winner

将表 2 连接到表 1 并优先考虑获胜行的最佳方式是什么,否则显示“无获胜者”?

最佳答案

一个简单的左连接应该在这里工作:

SELECT
t1.id,
t1.date,
COALESCE(t2.winner, 0) AS winner,
COALESCE(t2.username, 'No Winner') AS username
FROM table1 t1
LEFT JOIN table2 t2
ON t1.date = t2.date AND t2.winner = 1
ORDER BY
t1.date;

enter image description here

Demo

此答案假设在给定日期最多只有一个获胜者。它之所以有效,是因为我们可以通过来自第二个表的相应列上存在 NULL 值来确定是否存在获胜者,如果连接条件失败,就会发生这种情况。

关于MySQL 优先考虑行是否存在,如果不存在则显示其他内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51962019/

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