当我使用左外连接而不是所有行都有列的值时,如何在SQL查询中使用Order by
?这是在SQL Server 2005
Select * from Order O
left outer join Order_Selection OS on OS.Order_ColorID = O.Order_ColorID
order by OS.Order_SelectionID asc
此处并非所有行都有Order_selectionID
的值。当我使用DESC
时,我想要的订单搞砸了,当我使用ASC
时,行会排在最后,因为没有Order_SelectionID
的行首先出现。
提前谢谢!
答案 0 :(得分:3)
您可以使用CASE
表达式来避免依赖ISNULL(OS.Order_SelectionID, magic_number)
SELECT *
FROM Order O
LEFT OUTER JOIN Order_Selection OS
ON OS.Order_ColorID = O.Order_ColorID
ORDER BY CASE
WHEN OS.Order_SelectionID IS NULL THEN 1
ELSE 0
END,
OS.Order_SelectionID
答案 1 :(得分:-3)
具有Order_selectionID的行真的有必要吗?如果不使用子句来过滤它们:
and Order_selectionID is not null;
或者您可以将null值替换为某个虚拟值,如果您的数据允许: 在Oracle中:
select nvl(Order_selectionID, -1) from...