Mysql 执行leftJoin以获取缺少的值,但获取的值不是零?
旧的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 我的问题是:是否有一
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