问题描述
我有以下查询,该查询有效,但我想可以将其改进为更有效的方法,怎么做?
- 所有值均来自1个表
- 结果的第一部分始终是2行,它们之间具有某种关系,并与所有字段均已设置成1行
- 结果的第二部分是某些条件未包含在第一部分中且具有正确字段的行
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
中的匹配列(如果存在)。