gpt4 book ai didi

MySQL - 如果字段有值,则选择行,否则选择空值

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

我正在尝试使用 user_id 参数创建查询,该查询将为每个article_id 选择一行,其中设置了 user_id 的行具有优先级。例如:

如果 user_id = 1,则应选择 id 为 2、3、4 的行。

如果 user_id = 2,则应选择 id 为 1、3、5 的行。

如果 user_id = 17,则应选择 id 为 1、3、4 的行。

请考虑对(user_id,article_id)是唯一的。

id   user_id   article_id
1 null 8
2 1 8
3 null 9
4 null 10
5 2 10

最佳答案

您可以使用此查询:

SELECT *
FROM articles a1
WHERE user_id = 1 OR
user_id IS NULL AND NOT EXISTS(SELECT * FROM articles a2 WHERE a2.article_id = a1.article_id AND a2.user_id = 1)
ORDER BY user_id IS NULL

这将找到与 user_id = 1 或 NULL user_id 匹配的所有文章,其中没有与请求的条目匹配的条目user_id。结果按 user_id IS NULL 排序,对于与 user_id 匹配的文章,结果为 0;对于 user_id 为 NULL 的文章,结果为 1 ,从而优先考虑 user_id 上的实际匹配。

输出(对于user_id=1):

id  user_id     article_id
2 1 8
3 (null) 9
4 (null) 10

输出(对于user_id=2):

id  user_id     article_id
5 2 10
1 (null) 8
3 (null) 9

输出(对于user_id=17):

id  user_id     article_id
1 (null) 8
3 (null) 9
4 (null) 10

关于MySQL - 如果字段有值,则选择行,否则选择空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52574451/

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