【问题标题】:How to replace a value that does not exist in an INNER JOIN如何替换 INNER JOIN 中不存在的值
【发布时间】:2015-06-03 21:23:25
【问题描述】:

我需要从只使用一个表 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 = 不存在

我怎样才能做到这一点?我的意思是,结果只得到这两个值的数据。

【问题讨论】:

  • 然后删除b.car=4430。你不能同时拥有它:“告诉我 B 只有 4430,但也告诉我所有其他 B”
  • 但在这种情况下,我将拥有所有其他 CAR 值,但我只需要这 2 个
  • 所以where b.car in (4430, 'NP')
  • OK,NP 用于表示 CAR 4430 及其 VAL 不存在,以了解这种情况。这是我在最终结果中以某种方式写入的值。
  • 与论坛网站不同,我们不使用“谢谢”、“感谢任何帮助”或Stack Overflow 上的签名。请参阅“Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?。顺便说一句,这是“提前致谢”,而不是“在先致谢”。

标签: sql inner-join exists


【解决方案1】:

目前尚不清楚这是否是您在所有情况下都想要的,但这将为您提供您想要的输入输出:

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 行。

【讨论】:

  • 优秀!!非常感谢
【解决方案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;

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

【讨论】:

  • @DStanley 。 . .谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 2015-03-19
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多