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

我的要求是...

我必须从 table1 中获取所有记录,其中 table2 中的“值”为 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 record2(将在结果中,因为 table2 中没有 20 的值)

4

4 回答 4

3

如果您不能使用外连接,则可以将测试移至 where 子句以满足条件,这是在支持声明式连接之前您应该做的:

select a.* from table1 a, table2 b where a.id = b.id or b.value = 0
于 2013-04-02T21:06:04.430 回答
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

这是一个罗斯文的例子。

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 回答
0

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

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

SQL小提琴

于 2013-04-02T21:03:48.800 回答