我正在尝试使用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 匹配的所有文章,或者与请求的user_id
没有匹配条目的NULL
user_id
。结果按user_id IS NULL
排序,对于与user_id
匹配的文章,user_id
为 NULL 的文章为 0,因此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