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

efzxgjgh  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(268)

我正在尝试使用user\u id参数创建查询,该参数将为每个项目\u id选择一行,其中具有set user\u id的行具有优先级。例如:
如果用户id=1,则应选择id为2、3、4的行。
如果用户id=2,则应选择id为1、3、5的行。
如果用户id=17,则应选择id为1、3、4的行。
请考虑对(用户id、文章id)的唯一性。

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

yqkkidmi1#

您可以使用此查询:

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或a
NULL user_id 其中没有与请求的项匹配的项 user_id . 结果按顺序排列 user_id IS NULL 对于匹配 user_id ,1表示 user_id 为空,因此对 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

相关问题