我有两张桌子:
1) fk_tblUserEmployeeList
2) fk_tblmanageremployeelist
在这两个表中,一列是常见的userid
,我从UI获得userid
。我想从第一张表中获得userid
的记录。如果没有,请从第二个表中获取相同userid
的记录..
我正在尝试使用CASE
,但收到错误:
ERROR: more than one row returned by a subquery used as an expression
以下是我的询问:
select case when ( select count(userid)
from fk_tblUserEmployeeList
where userid=1
) > 1
then ( select employeeid
from fk_tblUserEmployeeList
where userid=1
)
else ( select employeeid
from fk_tblmanageremployeelist
where userid=1
)
end
答案 0 :(得分:1)
使用您提供的代码,case
的结果将包含多个row
。由于先前select
case
,因此会出错。你不能select
多个rows
。
select
case when (select count(userid) from fk_tblUserEmployeeList where userid=1) > 1
then (select employeeid from fk_tblUserEmployeeList where userid=1)
else (select employeeid from fk_tblmanageremployeelist where userid=1)
end
因此,为避免这种情况,您可以使用IF。
它应该是这样的:
IF (select count(userid) from fk_tblUserEmployeeList where userid=1) > 1 THEN
(select employeeid from fk_tblUserEmployeeList where userid=1)
ELSE
(select employeeid from fk_tblmanageremployeelist where userid=1)
END IF;
答案 1 :(得分:1)
尝试:
select employeeid
from fk_tblUserEmployeeList
where userid=1
union all
select employeeid
from fk_tblmanageremployeelist
where userid=1 and
not exists (select null
from fk_tblUserEmployeeList
where userid=1)
请注意,如果两个表中都没有用户,则不需要not exists
子句。
答案 2 :(得分:0)
select employeeid
from fk_tblUserEmployeeList
where userid = 1
and ( select count(*)
from fk_tblUserEmployeeList
where userid=1
) > 1
union all
select employeeid
from fk_tblmanageremployeelist
where userid = 1
and ( select count(*)
from fk_tblUserEmployeeList
where userid = 1
) <= 1
答案 3 :(得分:0)
我想这将是最简单和最快的:
SELECT COALESCE(
(SELECT employeeid FROM fk_tblUserEmployeeList WHERE userid = 1),
(SELECT employeeid FROM fk_tblmanageremployeelist WHERE userid = 1))
如果userid
不是 UNIQUE ,则必须添加一个方法来选择一行,例如:
SELECT COALESCE(
(SELECT employeeid
FROM fk_tblUserEmployeeList
WHERE userid = 1
ORDER BY employeeid
LIMIT 1),
(SELECT employeeid
FROM fk_tblmanageremployeelist
WHERE userid = 1
ORDER BY employeeid
LIMIT 1)
)