MySQL - 在A列上连接表,除非列A = x然后在列b上加入而不是

时间:2017-03-30 11:37:32

标签: mysql sql join

如果第一列等于特定值,是否可以在不同列上连接表。

见下文:

表A

  .----+-----------------.
  | ID | Name            |
  +----+-----------------+
  |  1 | Name goes here1 |
  |  2 | Name goes here2 |
  |  3 | Name goes here3 |
  |  4 | Name goes here4 |
  .----+-----------------+

tableB的

  .----+-----------------+-----------------.
  | ID | id1             | id2             |
  +----+-----------------+-----------------+
  |  1 | ID goes here    | ID goes here    |
  |  2 | ID goes here    | ID goes here    |
  |  3 | ID goes here    | ID goes here    |
  |  4 | ID goes here    | ID goes here    |
  .----+-----------------+-----------------.

所以例如,我想加入tableA ON tableA.ID = tableB.id1 UNLESS tableB.id1 = x THEN JOIN ON tableB.id2

1 个答案:

答案 0 :(得分:1)

您可以将此表达为on子句中的基本逻辑:

on (a.id = b.id1 and b.id1 <> x) or
   (a.id = b.id2 and b.id1 = x)

如果x可以NULL,逻辑会稍微复杂一些,但你绝对可以使用相同的想法。如果想要测试NULL,那么表达查询的更简单方法是:

on a.id = coalesce(b.id1, b.id2)