如何替换INNER JOIN中不存在的值

时间:2015-06-03 21:23:25

标签: sql inner-join exists

我需要仅使用一个表PK(ID,CAR)从内部联接中获取一些结果。

ID  CAR     VAL    
1   34      A
1   4430    B
1   50      C
2   34      D
2   55      M

这就是我所拥有的:

SELECT A.*, B.CAR, B.VAL    
FROM PRUEBA2 A INNER JOIN PRUEBA2 B ON 
A.ID = B.ID
WHERE 
A.VAL IN ('A','B') AND
A.CAR = 34 AND
B.CAR = 4430

但我得到了这个:

ID  CAR VAL CAR    VAL
1   34  A   4430   B

我需要控制两个不同的CAR值。如果A.CAR = 34和A.VAL IN('A','B'),那么如果这是真的,我需要检查CAR 4430的VAL是什么

我试图将此作为最终结果

A.ID    A.CAR   A.VAL   B.CAR     B.VAL
1       34      A       4430      B
2       34      D       NP        NP

NP =不存在

我怎样才能达到这个目标?我的意思是,仅得到这两个值的数据。

2 个答案:

答案 0 :(得分:2)

我想你想要一个left join

SELECT A.*, B.CAR, B.VAL    
FROM PRUEBA2 A LEFT JOIN
     PRUEBA2 B
     ON A.ID = B.ID AND B.CAR = 4430
WHERE A.VAL IN ('A','B') AND
      A.CAR = 34;

如果您不喜欢COALESCE()值,可以使用NULL

答案 1 :(得分:2)

目前尚不清楚这是否是你想要的所有情况,但是这会为你提供你想要输出的输出:

SELECT A.*, B.CAR, B.VAL    
FROM PRUEBA2 A 
LEFT JOIN PRUEBA2 B 
    ON A.ID = B.ID AND
       B.CAR = 4430
WHERE A.CAR = 34

请注意,您不能WHERE A.VAL IN ('A','B')或那会消除D行。