2012-01-04 6 views
1

私は2つのテーブルがあります。この2つのテーブルのカラムでPostgreSQLの大文字小文字を使用して複数のレコードを取得するには?

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 
+1

'>'は実際には '> ='でなければなりません。そうでなければ、一致するレコードが1つだけあればelse条件を使います。 –

+1

@マークが述べたことに加えて、元のクエリは 'LIMIT 1 'なしで全く動作しませんでした。 –

答えて

1

あなたが提示したコードでは、caseの結果はrow以上になります。これは、以前caseselectのためにエラーが発生します。 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を使用できます。

それはこのようなものでなければなりません:useridUNIQUEされていない場合、あなたがする必要があります

SELECT COALESCE(
     (SELECT employeeid FROM fk_tblUserEmployeeList WHERE userid = 1), 
     (SELECT employeeid FROM fk_tblmanageremployeelist WHERE userid = 1)) 

:私はこれが最も簡単かつ最速になると思い

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; 
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 
0

1つの行を選択するメソッドを追加します。

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) 
     ) 
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句が不要であること。

関連する問題