0

他の 3 つのテーブルに基づいて一時テーブルを作成したいと考えています。ただし、3番目のテーブルにエントリが存在するかどうかに応じて、適用される場合と適用されない場合がある条件があります。「where」条件にさまざまなケースを挿入するにはどうすればよいですか?

select table1.tran_num, table2.impact
from table 1, table2, table3
where tables1.tran_num = 12345
and table1.index = table2.index
"and case when table2.index in table3.index then table2.version = table3.version"
4

3 に答える 3

0

あなたはただ使う必要がありますINNER JOIN

select  table1.tran_num, table2.impact
from    table1 
        INNER JOIN table2
            ON table1.index = table2.index
        INNER JOIN table3
            ON table2.version = table3.version
where   tables1.tran_num = 12345

上記のクエリは、すべてのレコードがすべてのテーブルに存在する場合にのみレコードを表示します。versionただし、の列がにtable2存在しない場合でもレコードを表示したい場合table3は、aLEFT JOINが必要です。

select  table1.tran_num, table2.impact
from    table1 
        INNER JOIN table2
            ON table1.index = table2.index
        LEFT JOIN table3
            ON table2.version = table3.version
where   tables1.tran_num = 12345

参加の詳細については、以下の記事をご覧ください。

于 2013-01-07T00:51:07.900 に答える
0

次のような左結合と where 句を使用します。

where joined_table.id is null or joined_table.filter_col in (1,2,3)

例えば:

select t1.id, t2.id
from table1 t1
left join table2 t2
 on t1.fk_id = t2.id
where t2.id is null or t2.filter_col in (1,2,3,4)

上記のクエリは、t2 にない t1 からのすべてのレコード、または t2 にあり、t2 の同等の filter_col が (1,2,3,4) にある t1 からのレコードを取得します。

于 2013-01-07T00:56:05.550 に答える
0

次のロジックを試すことができます。

 IF EXISTS ( SELECT *
 FROM tablea a Left JOIN tableb b 
ON a._id = b._id 
Left JOIN tablec c ON b._id = c._id 
 SELECT 1 ELSE SELECT 0
于 2013-01-07T00:57:12.813 に答える