【问题标题】:mysql select from multiple tables but if id can't be found on the other 2 set a default value of null to the columnmysql 从多个表中选择,但如果在其他 2 个表中找不到 id,则为该列设置默认值 null
【发布时间】:2013-02-24 13:19:54
【问题描述】:

目前我在如何查询这个问题上遇到了问题。我当前的查询如下所示

  SELECT tbl1.col1,
  tbl1.col2,
  tbl1.col3,
  tbl1.col4,
  tbl1.col5,
  tbl2.col1,
  tbl2.col2,
  .
  .
  .
  tbln.col1,
  tbln.col2,

  FROM tbl1,tbl2,...tbln
  WHERE tbl1.col1= tbl2.col1AND
  .
  .
  .
  tbl1.col1= tbln.col1;

但我无法显示/显示其他表中不存在的那些行。

我真正想做的仍然是显示其他表中不存在的那些, 但如果特定数据不存在于其他表中,则只会在列中显示空值。

  SELECT tbl1.col1,
  tbl1.col2,
  tbl1.col3,
  tbl1.col4,
  tbl1.col5,
  iff(tbl2.col1 <> null,tbl2.col1,NULL),
  iff(tbl2.col2 <> null,tbl2.col1,NULL),
  .
  .
  .
  iff(tbln.col1 <> null,tbl2.col1,NULL),
  iff(tbln.col2 <> null,tbl2.col1,NULL),

  FROM tbl1,tbl2,...tbln
  WHERE tbl1.col1= tbl2.col1 AND
  .
  .
  .
  tbl1.col1= tbln.col1;

【问题讨论】:

  • 这里是tbl1 的主表吗?我的意思是这就是tbl2tbl3 是子表的表。

标签: mysql select


【解决方案1】:

只需使用LEFT JOIN:

SELECT
  tbl1.col1, tbl1.col2, ...
  tlb2.col1, tbl2.col2, ...
  tlb3.col1, tbl3.col2, ...
  ...
  tlbn.col1, tbln.col2, ...
FROM tbl1
  LEFT JOIN tbl2 ON tbl1.col1 = tbl2.col1
  LEFT JOIN tbl3 ON tbl1.col1 = tbl3.col1
  ...
  LEFT JOIN tbln ON tbl1.col1 = tbln.col1

如果tbl1 中的相应条目在该表中不存在条目,这将导致tbl2 中的所有列都为NULL。其他所有表格也一样。

【讨论】:

    【解决方案2】:

    我不知道你为什么使用iff

    试试if

       if(tbl2.col1 <> null,tbl2.col1,NULL),
    

    您可以使用 LEFT JOIN 显示空值,在您的情况下,您将执行数百个 if 语句,但使用 left join 更短更容易

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-18
      • 2019-03-05
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      相关资源
      最近更新 更多