有没有其他方法可以在sql中实现以下逻辑?

时间:2018-09-01 20:57:30

标签: sql sql-server database azure u-sql

我有两个表-> tb1和tb2。 我正在使用ID列在这些表上执行左联接操作,而且我还有其他条件,例如一列不等于另一列。 下面是示例代码

select * from tb1 LEFT JOIN tb2 ON tb1.id=tb2.id AND tb1.pid!=tb2.pid;

我能够从上述查询中获取结果。

但是我需要知道是否有其他方法可以使用sql获得相同的结果??

2 个答案:

答案 0 :(得分:2)

实际的SQL标准使用<>而不是!=

select * from tb1 LEFT JOIN tb2 ON tb1.id=tb2.id AND tb1.pid<>tb2.pid;

答案 1 :(得分:0)

由于您的加入和加入条件,您似乎不等于不工作。 如果我们创建两个表并按照您的查询进行创建

create table t1(id int,pid int);
create table t2 (id int,pid int );
insert into t1 values(1,2),(2,3),(3,4);
insert into t2 values(1,2),(2,3),(3,4);

select t1.* from t1 left join
t2 on t1.id=t2.id and 
t1.pid!=t2.pid
order by t1.id 

id  pid
1   2
2   3
3   4

它返回第一个表的所有值,因为LEFT JOIN从左表(表1)返回所有记录,从右表(表2)返回匹配的记录。如果不匹配,则结果从右侧为NULL。

但是,如果您将内部联接放在相同的位置,则不会返回任何行。所以我认为问题不在“不等于运算符”中