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

时间:2018-09-30 03:47:51

标签: mysql

我正在尝试使用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

1 个答案:

答案 0 :(得分:1)

您可以使用以下查询:

malloc()

这将找到所有与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 = 1匹配或与user_id NULL匹配的条目,其中没有与请求的user_id匹配的条目。结果按user_id排序,与user_id IS NULL匹配的文章为0,而user_id为NULL的文章为1,因此优先考虑{{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