2013-04-02 82 views
-4

我有2個表如下:內連接有或條件(SQL服務器)

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) 

我的要求是...

我從何處獲取table1的所有記錄「表2中的'值'是0或者表2中沒有記錄。對於id = 20,表2中沒有記錄,但我仍然想在結果中顯示它。

我不想使用LEFT JOIN。我想在INNER JOIN中使用OR條件。

我當前的查詢是...

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

我找的是結果...

10 RECORD1(將在結果,因爲它是表2中值爲0) 20 RECORD2 (將在結果,因爲在表2 20沒有值)

+3

'LEFT JOIN'有什麼問題? – peterm

+0

您是否必須使用連接? –

+3

該要求沒有意義。您不能使用'INNER JOIN'並表示不滿足連接條件的行。你說你想在你的漢堡包上番茄醬,但你不想用番茄醬。你能解釋爲什麼你不想使用左連接,或者你爲什麼認爲可以用內連接來做到這一點? –

回答

3

如果您不能使用外連接時,您可以將測試where子句滿足條件,這是你會做什麼聲明聯接得到支持之前:

select a.* from table1 a, table2 b where a.id = b.id or b.value = 0 
0

恕我直言,你的要求是奇怪了一點,但你可以試試這個沒有在所有

加入

SQL Fiddle

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

現在,我們知道你的理由,要求我們在不使用左連接是膚淺的,至少有點誤導,請嘗試此查詢:

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; 

如果不能獲得滿意的結果你正在尋找,然後請更新與你正在尋找的結果的問題,而不是告訴我們你必須執行左連接,而不使用左連接。

+0

我在尋找一個結果... – user1019072

+0

10個記錄1和20個記錄2 – user1019072

+0

好吧,再解釋一下爲什麼用LEFT JOIN無法做到這一點,就像在這個答案中一樣? –