微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将`SELECT` ..`UNION ALL``SELECT` ..转换为更有效的东西?

如何解决将`SELECT` ..`UNION ALL``SELECT` ..转换为更有效的东西?

我有以下查询,该查询有效,但我想可以将其改进为更有效的方法,怎么做?

  1. 所有值均来自1个表
  2. 结果的第一部分始终是2行,它们之间具有某种关系,并与所有字段均已设置成1行
  3. 结果的第二部分是某些条件未包含在第一部分中且具有正确字段的行
    SELECT
      row1.field1 AS field1,row1.field2 AS field2,row2.field3 AS field3,FROM
      table1 row1
    JOIN
      table1 row2
    ON
      row1.field = row2.field_reference
    UNION ALL
    SELECT
      field1,field2,field3,FROM
      table1
    WHERE
      condition = 'I_am_sure_those_rows_are_not_returned_in_the_SELECT_above'

解决方法

*在阅读@jarlh对另一个答案的评论后编辑-应该是空的。

这是怎么回事-在WHERE子句中使用LEFT JOIN加上OR语句应返回row2表中的所有内容以及所有满足您其他条件的内容。

SELECT
row1.field1 AS field1,row1.field2 AS field2,coalesce(row2.field3,row1.field3) as field3
FROM table1 row1
LEFT JOIN table1 row2 ON row1.field = row2.field_reference

WHERE 
row2.field_reference is not null
OR condition = 'I_am_sure_those_rows_are_not_returned_in_the_SELECT_above'
,

我认为您想要left join

SELECT row1.field1 AS field1,row1.field3) AS field3,FROM table1 row1 LEFT JOIN
     table1 row2
     ON row1.field = row2.field_reference;

这会返回table1中的 all 行以及table2中的匹配列(如果存在)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。