sql - 选择具有字段集或null的所有记录

时间:2011-03-08 08:25:53

标签: sql stored-procedures select

我有一个存储过程,其中我想选择一个表t的所有记录,其中user_id字段等于参数p_user_id:

SELECT * FROM T WHERE user_id = p_user_id;

但如果参数为NULL(如果您愿意,则为零)我想要所有记录。 也就是说,我无法想到WHERE子句中的CASE。

4 个答案:

答案 0 :(得分:2)

SELECT * FROM T
WHERE user_id = p_user_id
OR p_user_id is null
OR p_user_id = 0

应该工作。

如果p_user_id为null,那么子句user_id = p_user_id将等同于UNKNOWN,大多数数据库中的结果将不匹配任何行(sybase是一个例外)。

答案 1 :(得分:2)

 SELECT * FROM T WHERE user_id = p_user_id or p_user_id is null or p_user_id = 0;

答案 2 :(得分:0)

SELECT * FROM T WHERE user_id = @p_user_id OR @p_user_id IS NULL

当参数为NULL(NULL IS NULL == TRUE)

时,OR子句为true

答案 3 :(得分:0)

如果我理解正确,你想要这个:

IF p_user_id IS NULL
    (SELECT * FROM T);
ELSE
    (SELECT * FROM T WHERE user_id = p_user_id)