我有一个简单的用户偏好表看起来像这样:仅当非空值不存在时才选择空位?
id | user_id | preference_name | preference_value
是什么让这个独特的表虽然是如果USER_ID字段为空,这意味着它是针对偏好的默认值。我试图获得用户的所有首选项,并且只有在没有为该用户指定实际值的情况下才使用默认值。
所以基本上我需要:
SELECT * FROM user_preferences WHERE user_id = {userIdVar} OR user_id IS NULL;
,但我想抛出了一个user_id是空的结果,如果没有在结果与同PREFERENCE_NAME和user_id的值设置另一行。
有没有办法做到这一点与单个SQL查询,或者我应该这样做的代码?
在MySQL子查询往往是资源密集型的,也许SQL-Server有优化,使得该子查询是首选。我会选择在一个子查询代替直接选择'FROM user_preferences'和走样,所以你可以用自己加入它的默认值。 – funkwurm
@funkwurm谢谢,会编辑。 – hvd
这会返回错误的结果!看到我的答案和sql小提琴 – amaster