执行 leftJoin 以获取缺失值,但获取的值不是零?
Doing a leftJoin to get missing values, but getting something other than zero for the values?
旧 leftJoin 问题的一个细微变体:我有两个要加入的表:
ID Val1
1 100
2 200
3 300
和
ID Val2
2 50
关注 combine two tables and fill in missing values in mysql 和其他人,这:
SELECT Table1.ID, Table1.Val1, COALESCE(Table2.Val2, 0) AS Val2
FROM Table1 LEFT OUTER JOIN Table2 USING (ID)
会给我通常的结果:
ID Val1 Val2
1 100 0
2 200 50
3 300 0
我的问题:有没有办法得到除零以外的值作为缺失值,也许:
ID Val1 Val2
1 100 9999
2 200 50
3 300 9999
我想对结果进行排序,以便具有缺失值的项目出现在集合的末尾;像这样的事情似乎让我去做(当然还有一些额外的 ORDER BY 东西)。
有什么想法吗?如果无法做到这一点,是否有另一种方法可以让我按照自己喜欢的方式进行订购?谢谢!
使用 COALESCE(Table2.Val2, 9999)
而不是 COALESCE(Table2.Val2, 0)
。
这就是 COALESCE 的作用,如果第一个表达式为 NULL,则它设置下一个表达式。
如果您的主要目标是将值为 0 的行放在底部,并将其余行按升序排列,您可以执行以下操作。
SELECT
Table1.ID,
Table1.Val1,
COALESCE(Table2.Val2, 0) AS Val2
FROM Table1
LEFT OUTER JOIN Table2 USING (ID)
ORDER BY
(CASE WHEN Table2.Val2 IS NULL then 1 ELSE 0 END),
Table2.Val2
这将产生这样排序的结果集:
ID Val1 Val2
2 200 50
1 100 0
3 300 0
旧 leftJoin 问题的一个细微变体:我有两个要加入的表:
ID Val1
1 100
2 200
3 300
和
ID Val2
2 50
关注 combine two tables and fill in missing values in mysql 和其他人,这:
SELECT Table1.ID, Table1.Val1, COALESCE(Table2.Val2, 0) AS Val2
FROM Table1 LEFT OUTER JOIN Table2 USING (ID)
会给我通常的结果:
ID Val1 Val2
1 100 0
2 200 50
3 300 0
我的问题:有没有办法得到除零以外的值作为缺失值,也许:
ID Val1 Val2
1 100 9999
2 200 50
3 300 9999
我想对结果进行排序,以便具有缺失值的项目出现在集合的末尾;像这样的事情似乎让我去做(当然还有一些额外的 ORDER BY 东西)。
有什么想法吗?如果无法做到这一点,是否有另一种方法可以让我按照自己喜欢的方式进行订购?谢谢!
使用 COALESCE(Table2.Val2, 9999)
而不是 COALESCE(Table2.Val2, 0)
。
这就是 COALESCE 的作用,如果第一个表达式为 NULL,则它设置下一个表达式。
如果您的主要目标是将值为 0 的行放在底部,并将其余行按升序排列,您可以执行以下操作。
SELECT
Table1.ID,
Table1.Val1,
COALESCE(Table2.Val2, 0) AS Val2
FROM Table1
LEFT OUTER JOIN Table2 USING (ID)
ORDER BY
(CASE WHEN Table2.Val2 IS NULL then 1 ELSE 0 END),
Table2.Val2
这将产生这样排序的结果集:
ID Val1 Val2
2 200 50
1 100 0
3 300 0