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