Mysql 执行leftJoin以获取缺少的值,但获取的值不是零?

Mysql 执行leftJoin以获取缺少的值,但获取的值不是零?,mysql,join,left-join,Mysql,Join,Left Join,旧的leftJoin问题有一个小小的变化:我有两个表要连接: ID Val1 1 100 2 200 3 300 及 以下内容和其他内容: 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 我的问题是:是否有一

旧的leftJoin问题有一个小小的变化:我有两个表要连接:

ID Val1
1  100
2  200
3  300

以下内容和其他内容:

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
我希望对结果进行排序,以便将缺少值的项放在集合的末尾;像这样的东西似乎可以让我这么做(当然还有一些额外的订单)

有什么想法吗?如果不能做到这一点,有没有其他方法可以让我以我喜欢的方式订购?谢谢

使用
COALESCE(表2.Val2,9999)
代替
COALESCE(表2.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

在调用
COALESCE
时,您可以得到您输入的任何内容。你认为这是干什么用的?你也可以使用
orderby(Val2!=0),Val2
ID Val1 Val2
2  200  50
1  100  0
3  300  0