用AND子句加入ON

时间:2016-06-13 14:09:49

标签: sql sql-server join

我在使用JOIN QUERY时遇到了困难,而且很难掌握JOIN语法。

SELECT * FROM TABLE_A
JOIN TABLE_B ON TABLE_B.Column1 = TABLE_A.Column1 
             AND (TABLE_B.Column1 + CONVERT(varchar(10), TABLE_B.Column2)) != TABLE_A.Column1

我需要从两个表中获取满足这两个条件的行,但是当前返回的结果就好像AND条件不存在...

关于实现这一点的任何想法?为了帮助进入背景:

Table A         Table B
ABCD            ABCD        21          Username1
ABCD21          ABCD        10          Username2
ABCD                        
ABCD            
ABCD21
ABCD21

期望的输出:

Table C
ABCD        10      Username1
ABCD        10      Username1
ABCD        10      Username1

P.S。我目前可以做与我的问题相反的问题:

SELECT * FROM TABLE_A
JOIN TABLE_B ON (TABLE_B.Column1 + CONVERT(varchar(10), TABLE_B.Column2)) = TABLE_A.Column1

2 个答案:

答案 0 :(得分:1)

评估AND 如果第一个条件为真,则第二个条件保证为真,除非TABLE_B.Column2为null或为空

如果"一个" ="一个"
然后"一个" +"两个" !="一个"

ON   TABLE_B.Column1                                           = TABLE_A.Column1 
AND (TABLE_B.Column1 + CONVERT(varchar(10), TABLE_B.Column2)) != TABLE_A.Column1

每行都有自己的评估

请更好地描述您要做的事情

这可能是你想要的

SELECT B1.*
FROM TABLE_A A 
JOIN TABLE_B B1
      ON B1.Column1 = A.Column1 
LEFT JOIN TABLE_B B2
      on (B2.Column1 + CONVERT(varchar(10), B2.Column2)) = A.Column1
WHERE B2.Column1 IS NULL;

尝试

on (B2.Column1 + CONVERT(varchar(10), B2.Column2)) != A.Column1

答案 1 :(得分:0)

问题是有多行符合第一个条件。有些人也满足第二个条件。

我认为您正在寻找带有left join子句的where

SELECT *
FROM TABLE_A a LEFT JOIN
     TABLE_B b
     ON b.Column1 = a.Column1 AND
        (b.Column1 + CONVERT(varchar(10), b.Column2)) = a.Column1
WHERE b.Column1 IS NULL;