执行 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