问题 SQL-Server / Access - 订购BY 1,2?


我今天遇到了一个问题,

SELECT col1,'yes' as col2  FROM myTable  
   WHERE col2=TRUE  
UNION  
SELECT col1,'no' as col2 FROM mytable  
   WHERE col2=FALSE  
ORDER BY 1,2  

我认为它将按第一列排序然后第二列,但由于涉及UNION,我有点不确定是否有人可以解释此查询的确切含义


2271
2018-06-22 16:46


起源

您是否因为某种原因而包含Access?您正在执行查询的哪个RDBMS? - p.campbell
好吧,除了你的问题,我有自己的一个,为什么你这样做呢?当然是 SELECT col1, CASE WHEN col2 = TRUE THEN 'yes' ELSE 'no' END as col2 FROM mytable ORDER BY 1, 2 会更好,不是吗? - Lasse Vågsæther Karlsen
@Lasse:一般来说,你建议的查询并不完全等同于OP。如果 col2 可以为空并且包含NULL,两个查询,你的和OP,会返回不同的结果。但当然,基本上你已经提出了一个很好的观点。 - Andriy M
@Andriy同意,我根本不考虑NULL,在这样的解决方案中必须考虑到这一点。 - Lasse Vågsæther Karlsen


答案:


SQL Server将结果合并在一起(这是一个隐含的select distinct),然后按col1然后col2排序结果。在联合查询中,您可以在最终选择上放置ORDER BY,这将对最终结果进行排序。


13
2018-06-22 16:52