SQL查询中的Venn操作
我有一个表,其中列出了可以是管理员、开发人员,也可以是非管理员 EMP_ID IS_ADMIN IS_DEV 1 Y Y 2 Y N 3 N Y 4 N N EMP_ID是_ADMIN是_DEV 1年 2 Y N 3纽约 4 N N 我想写一个查询,这样当我请求SQL查询中的Venn操作,sql,oracle,Sql,Oracle,我有一个表,其中列出了可以是管理员、开发人员,也可以是非管理员 EMP_ID IS_ADMIN IS_DEV 1 Y Y 2 Y N 3 N Y 4 N N EMP_ID是_ADMIN是_DEV 1年 2 Y N 3纽约 4 N N 我想写一个查询,这样当我请求 IS_ADMIN=Y返回1,2 IS_DEV=Y返回1,3 IS_DEV=Y,IS_
是否要将此登录合并到一个查询中?您可以将所有选项指定为参数,将null传递给您不关心的任何参数,并检查null作为查询条件。您的逻辑有点弯曲,因此必须针对每个组合进行精确编程:
SELECT
emp_id
FROM
emps
WHERE
(is_admin = 'Y' AND :isadmin = 'Y' AND :isdev is null)
OR
(is_dev = 'Y' AND :isdev = 'Y' AND :isadmin is null)
OR
(:isadmin = 'Y' AND :isdev = 'Y' AND (is_admin = 'Y' OR is_dev = 'Y'))
OR
(COALESCE(:isadmin, 'N') = 'N' AND COALESCE(:isdev, 'N') = 'N' AND is_admin = 'N' AND is_dev = 'N')
您选择的调用语言将参数设置为“Y”、“N”或null(如果它没有意见),例如,对于您的案例1,在c#中:
sqlCommand.Parameters["isadmin"].Value = "Y";
sqlCommand.Parameters["isdev"].Value = DBNull.Value;
using(var reader = sqlCommand.ExecuteReader()) ....
我不确定你的逻辑在这里是否有意义。如果IS_DEV=Y或IS_ADMIN=Y应返回1,2,3,那么IS_DEV=N或IS_ADMIN=N如何仅返回4?它不应该返回2,3,4吗?PL/SQL是Oracle DBMS的过程语言。你在使用Oracle还是MySQL?我在使用Oracle。我已经为你修复了问题标签。