我在面试时曾遇到过这个问题,例如error,1,2,3
现在得到的结果是:2
答案 0 :(得分:-1)
select count(*)+COUNT(*)
结果是2
通常所有选择的形式都是SELECT [列,列上的标量计算,列上的分组计算或标量计算] FROM [表或表的连接等]
因为这允许简单的标量计算,所以我们可以执行类似SELECT 1 + 1 FROM SomeTable的操作,并且它将为表SomeTable中的每一行返回一个值为2的记录集。
现在,如果我们不在乎任何表,而是只想进行标量计算,则可能要执行类似SELECT 1 + 1的操作。这是标准不允许的,但它很有用,而且大多数数据库允许这样做(除非最近更改,Oracle否则不会这样做,至少以前没有这么做)。
因此,这样的裸SELECT就像被视为具有一个FROM子句一样,该SELECT子句指定一个表只有一行且没有任何列(当然这是不可能的,但是确实可以做到)。因此,SELECT 1 + 1成为ImaginaryTableWithOneRow的SELECT 1 + 1,它将返回单行和单列的值为2。
通常我们不会考虑这一点,只是习惯了裸SELECT会给出结果的事实,甚至都没有想到必须选择一些单行的东西才能返回一行的事实。
在执行SELECT COUNT()时,您执行了与ImaginaryTableWithOneRow中的SELECT COUNT()等效的操作,该操作当然会返回1。