【问题标题】:MySQL JOIN - Don't want NULL ValueMySQL JOIN - 不想要 NULL 值
【发布时间】:2016-01-25 01:38:31
【问题描述】:

假设我有 2 张桌子:

 table1
   table1_id
   table1_name

 table2
   table2_id
   table2_name
   table2_description
   table1_id

我是这样加入的:

 SELECT * FROM table1 LEFT JOIN table2 ON table1.table1_id = table2.table1_id

当 table2 中没有匹配项时,如何让 table1_id 返回其默认值而不是 NULL?

Answer:由于两个表中都存在table1_id,所以我需要使用别名。

 SELECT *, table1.table1_id AS tid, table2.table1_id AS t2id FROM table1 LEFT JOIN table2 ON table1.table1_id = table2.table1_id

【问题讨论】:

  • 左连接然后合并?
  • 样本数据和期望的结果将有助于传达您想要做的事情。
  • table1_id 的 NULL 值是什么意思?左连接,table1_id 永远不会为 NULL。你是选择星,table2 只能有可能的空值

标签: mysql join left-join


【解决方案1】:

如果我理解正确,你引入默认行,然后在select 中使用逻辑:

SELECT t1.*,
       COALESCE(t2.table2_name, t2def.table2_name) as table2_name,
       . . .
FROM table1 t1 LEFT JOIN
     table2 t2
     ON t1.table1_id = t2.table1_id LEFT JOIN
     table2 t2def
     ON t2def.table1_id = $defaultid;

【讨论】:

    【解决方案2】:
    SELECT table1.*
      table2.table2_id,
      table2.table2_name,
      table2.table2_description,
      ifnull(table2.table1_id, table1.table1_id) t2id
    FROM table1 LEFT JOIN table2 
    ON table1.table1_id = table2.table1_id
    

    再一次,检查 table2.table1_id 是否为空是没有意义的,因为它是连接列...总是 NULL 或与 table1.table1_id 完全相同

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多