内连接或条件(SQL服务器)

时间:2013-04-02 20:53:07

标签: sql-server

我有两张表格如下:

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获取所有记录,其中table2中的'value'为0或table2中没有记录。对于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 record1(因为它在table2中的值为0,所以会在结果中) 20记录2(结果是因为表2中没有20的值)

4 个答案:

答案 0 :(得分:3)

如果你不能使用外连接,你可以将测试移动到where子句以满足条件,这是你在支持声明性连接之前所要做的:

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

答案 1 :(得分: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 )

答案 2 :(得分: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;

如果这不能得到您正在寻找的结果,请使用您要查找的结果更新问题,而不是告诉我们您必须在不使用左连接的情况下执行左连接。

答案 3 :(得分:0)

恕我直言,你的要求有点奇怪,但你可以试试这个没有加入

SELECT * 
FROM table1 
WHERE id NOT IN(SELECT DISTINCT id FROM table2 WHERE value<>0 OR value IS NULL)

<强> SQL Fiddle