MySQL - 在列 A 上加入表,除非列 A = x 然后加入列 b

Posted

技术标签:

【中文标题】MySQL - 在列 A 上加入表,除非列 A = x 然后加入列 b【英文标题】:MySQL - Join table on column A unless column A = x then join on column b instead 【发布时间】:2017-03-30 11:37:31 【问题描述】:

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

见下文:

表A

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

表B

  .----+-----------------+-----------------.
  | 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

【问题讨论】:

能否请您添加所需的输出也有问题?到时候帮到你就很容易了。 x 可以为空吗?? ON (tableA.ID = tableB.id1 AND tableB.id1 <> x) OR (tableA.ID = tableB.id2) 【参考方案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)

【讨论】:

如果 x 为空怎么办? x是否为null没关系...只会影响运营商...逻辑是一样的... 非常感谢!工作了一个款待:-D

以上是关于MySQL - 在列 A 上加入表,除非列 A = x 然后加入列 b的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的表现ALTER TABLE在列之后添加列 - 在一张大桌子上

将 mysql 表导出到 csv 中,其中数据在列中包含换行符

MySQL表级约束和列级约束

如果数据框中存在列,则R在列上应用函数

何时在列中使用Null与N / A?

在列表表视图中放置 3 个复选标记,按下按钮,在新表视图中显示 3 列