使用IN(SELECT ....)作为条件

时间:2015-12-25 16:46:27

标签: sql

我在下面的简化SQL代码中遇到错误,我需要您的帮助来解决它。

SELECT user

FROM Table1      

WHERE

user = IF( CURRENT_USER() in (select name from Table2) , user, CURRENT_USER() )

函数CURRENT_USER()返回进入我正在创建的仪表板的用户的名称。

所以基本上,如果当前用户列在Table2的名称列中,我想从Table1返回用户名列表。如果未列出,则仅返回当前用户的姓名。

我收到此错误:

半连接表达式(即“x IN(SELECT ...)”)必须是逻辑AND的一部分。

我很感激任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果我理解正确

SELECT user
FROM Table1      
WHERE CURRENT_USER() in (select name from Table2) 
   OR user = CURRENT_USER() 

Table1中出现CURRENT_USER()时,这将返回Table2的所有行。

如果您想在Table1中出现CURRENT_USER()时限制来自Table2的数据,那么

SELECT user
FROM Table1      
WHERE (CURRENT_USER() in (select name from Table2) and some_col = 'some_condition')
   OR user = CURRENT_USER() 

更新:

试试这个语法

SELECT user
FROM Table1      
WHERE EXISTS (select 1 from Table2 where name = CURRENT_USER()) 
   OR user = CURRENT_USER()