我正在使用mysql视图,我想在该视图上使用IF ELSE语句.它给我这样的错误
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'if(getUser()="") THEN]
select hie_code_1 from hs_hr_emp_level L,hs_hr_u' at line 7
Run Code Online (Sandbox Code Playgroud)
这是我的观点
drop view if exists vw_hs_hr_employee;
CREATE VIEW vw_hs_hr_employee as
select * from hs_hr_employee where
hie_code_1 in
(
BEGIN
if(getUser()="") THEN
select hie_code_1 from hs_hr_emp_level L
ELSE
select hie_code_1 from hs_hr_emp_level L,hs_hr_users U
where L.emp_number=U.emp_number
and L.emp_number=getUser()
and ( U.def_level=1 or U.def_level=4 )
END if
)
Run Code Online (Sandbox Code Playgroud)
在这里编辑我的功能
CREATE FUNCTION `getUser`() RETURNS char(50) CHARSET latin1
RETURN @user
Run Code Online (Sandbox Code Playgroud)
如果有人能帮助我,谢谢
更新的查询
CREATE VIEW vw_hs_hr_employee as
select * from hs_hr_employee where
CASE getUser()
WHEN ''
THEN
select hie_code_1 from hs_hr_emp_level L
END
hie_code_1 in ( select hie_code_1 from hs_hr_emp_level L,hs_hr_users U where L.emp_number=U.emp_number and L.emp_number=getUser() and ( U.def_level=1 or U.def_level=4 ) )
or
hie_code_3 in ( select hie_code_3 from hs_hr_emp_level L,hs_hr_users U where L.emp_number=U.emp_number and L.emp_number=getUser() and U.def_level=2 )
or
hie_code_4 in ( select hie_code_4 from hs_hr_emp_level L,hs_hr_users U where L.emp_number=U.emp_number and L.emp_number=getUser() and U.def_level=3 )
Run Code Online (Sandbox Code Playgroud)
givinign错误 syntax to use near 'select hie_code_1 from hs_hr_emp_level L END hie_code_1 in ( select hie_code_' at line 6
完成
drop view if exists vw_hs_hr_employee;
CREATE VIEW vw_hs_hr_employee as
select * from hs_hr_employee e where CASE WHEN getUser()=''
THEN
e.emp_number is not null
ELSE
hie_code_1 in ( select hie_code_1 from hs_hr_emp_level L,hs_hr_users U where L.emp_number=U.emp_number and L.emp_number=getUser() and ( U.def_level=1 or U.def_level=4 ) )
or
hie_code_3 in ( select hie_code_3 from hs_hr_emp_level L,hs_hr_users U where L.emp_number=U.emp_number and L.emp_number=getUser() and U.def_level=2 )
or
hie_code_4 in ( select hie_code_4 from hs_hr_emp_level L,hs_hr_users U where L.emp_number=U.emp_number and L.emp_number=getUser() and U.def_level=3 )
end
Run Code Online (Sandbox Code Playgroud)
正如 Conspiccious 所评论的,视图可以保存一个简单的SELECT语句。
您可以使用带有块的单个查询CASE:
CREATE VIEW vw_hs_hr_employee as
SELECT *
FROM hs_hr_employee
WHERE CASE WHEN getUser() = ''
THEN hie_code_1 IN (
SELECT hie_code_1
FROM hs_hr_emp_level)
ELSE hie_code_1 IN (
SELECT hie_code_1
FROM hs_hr_emp_level L,hs_hr_users U
WHERE L.emp_number=U.emp_number
AND L.emp_number=getUser()
AND ( U.def_level=1 or U.def_level=4))
END
Run Code Online (Sandbox Code Playgroud)
或者使用基于联接的查询(创建第二个视图来解决 MySql 限制):
DROP VIEW IF EXISTS vw_hs_hr_employee_sub;
CREATE VIEW vw_hs_hr_employee_sub AS
SELECT hie_code_1
FROM hs_hr_emp_level L
LEFT JOIN hs_hr_users U
ON L.emp_number = U.emp_number
AND L.emp_number = getUser()
AND ( U.def_level=1 or U.def_level=4 )
WHERE getUser() = '' OR U.emp_number IS NOT NULL
GROUP BY 1;
drop view if exists vw_hs_hr_employee;
CREATE VIEW vw_hs_hr_employee as
SELECT e.*
FROM hs_hr_employee e JOIN vw_hs_hr_employee_sub USING(hie_code_1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2588 次 |
| 最近记录: |