0

結合する必要のあるテーブルが3つあります。

Table1には、列id、Name、idObject、lineItemがあります。Table2には、列id、City、idLineItem、idOrder、idSupplier、idAdvがあります。表3には、列idAdv、Stateがあります。

私の質問は:

select Table1.id, Table1.Name, Table1.idObject, Table2.City, Table3.State
from Table1 
join Table2 ON case 
                 when Table1.Name='abc' then Table1.idObject=Table2.idLineItem
                 when Table1.Name='def' then Table1.idObject=Table2.idOrder
                 else Table1.idObject=Table2.idSupplier
               end
join Table3 on Table2.idAdv=Table3.idAdv
group by Table1.id, Table1.idObject;
4

2 に答える 2

1

CASEステートメントは単一の値しか返すことができないため、比較をCASEの外に移動する必要があります。このようなもの:

select Table1.id, Table1.Name, Table1.idObject, Table2.City, Table3.State
from Table1 
join Table2 ON Table1.idObject = case 
                 when Table1.Name='abc' then Table2.idLineItem
                 when Table1.Name='def' then Table2.idOrder
                 else Table2.idSupplier
               end
join Table3 on Table2.idAdv=Table3.idAdv
group by Table1.id, Table1.idObject;
于 2013-03-05T00:46:44.453 に答える
1

おそらく..

select Table1.id, Table1.Name, Table1.idObject, Table2.City, Table3.State 
from Table1 
join Table2 ON
   (Table1.Name='abc' and Table1.idObject=Table2.idLineItem) 
OR (Table1.Name='def' and Table1.idObject=Table2.idOrder) 
OR (Table1.Name <> 'abc' and Table1.Name <> 'def' and Table1.idObject=Table2.idSupplier) 
join Table3 on Table2.idAdv=Table3.idAdv 
group by Table1.id, Table1.idObject;

ただし、実行計画を確認することをお勧めします。

于 2013-03-05T01:21:25.520 に答える