sql右连接返回空行

rhfm7lfc  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(398)

我正在尝试加入下表:
表a:

  1. Type1 Type2 ID Object Location
  2. Sample Dummy 1 X111 111222
  3. Sample Dummy 2 X333 333444
  4. Sample Dummy 2 X333 555666
  5. Sample Red 1 X222 666777
  6. Test Red 1 X222 666777
  7. Test Red 1 X222 666777

表b:

  1. Source Type2 ID Object Logged
  2. SR1 Dummy 1 X111 17
  3. SR1 Dummy 2 X333 1
  4. SR1 Red 1 X222 12
  5. SR2 Dummy 1 X111 9
  6. SR2 Dummy 2 X333 9
  7. SR2 Red 1 X222 20

我的sql代码:

  1. SELECT B.Source, B.Type2, B.ID, B.Object, B.Logged, A.Location
  2. FROM A RIGHT JOIN B ON
  3. A.Type1='Sample' AND
  4. A.Type2=B.Type2 AND
  5. A.ID=B.ID AND
  6. A.Object=B.Object
  7. WHERE B.Source='SR2'

我期待以下结果:

  1. Source Type2 ID Object Logged Location
  2. SR1 Dummy 1 X111 17 111222
  3. SR1 Dummy 2 X333 1 333444
  4. SR1 Dummy 2 X333 1 555666
  5. SR1 Red 1 X222 12 666777

但我得到的却是:

  1. Source Type2 ID Object Logged Location
  2. SR1 Dummy 1 X111 17 111222
  3. SR1 Dummy 2 X333 1 -
  4. SR1 Dummy 2 X333 1 -
  5. SR1 Red 1 X222 12 666777

我的代码怎么了?请帮忙。

ffvjumwh

ffvjumwh1#

LEFT JOIN 更容易理解。问题是过滤 b.Type1 = 'Sample' . 据我所知,这是不需要的:

  1. SELECT B.Source, B.Type2, B.ID, B.Object, B.Logged, A.Location
  2. FROM B LEFT JOIN
  3. A
  4. ON A.Type2 = B.Type2 AND
  5. A.ID = B.ID AND
  6. A.Object = B.Object
  7. WHERE B.Source = 'SR2';

相关问题