-4

私は以下のように2つのテーブルを持っています:

create table table1 (id int not null, c1 varchar(10))       

create table table2 (id int not null, value varchar(10))

insert into table1 values (10, 'record 1')  
insert into table1 values (20, 'record 2')

insert into table2 values (10, 0)   

私の要件は...

table2 の「値」が 0 であるか、table2 にレコードがない場合、table1 からすべてのレコードをフェッチする必要があります。id=20 の場合、table2 にはレコードがありませんが、それでも結果に表示したいと考えています。

LEFT JOIN を使用したくありません。INNER JOINでOR条件を使いたい。

私の現在のクエリは...

select a.* 
from table1 a 
inner join table2 b
on a.id = b.id and b.value = 0

私が探している結果は...

10 レコード 1 (テーブル 2 の値が 0 であるため結果になります) 20 レコード 2 (テーブル 2 に 20 の値がないため結果になります)

4

4 に答える 4

2

左結合を使用しないように要求する理由が表面的であり、少なくとも多少見当違いであることがわかったので、次のクエリを試してください。

SELECT a.id, a.c1 
FROM dbo.table1 AS a 
LEFT OUTER JOIN dbo.table2 AS b
ON a.id = b.id 
AND b.value = 0;

探している結果が得られない場合は、左結合を使用せずに左結合を実行する必要があると言うのではなく、探している結果で質問を更新してください。

于 2013-04-02T21:16:41.000 に答える
1

以下は Northwind の例です。

select * from [dbo].[Customers] custs where 
not exists ( select null from dbo.[Orders] innerOrds where innerOrds.CustomerID = custs.CustomerID  )
OR
exists ( select null from dbo.[Orders] innerOrds where innerOrds.CustomerID = custs.CustomerID and innerOrds.EmployeeID = 7 )
于 2013-04-02T21:08:21.133 に答える