Почему дублированные результаты возвращаются даже при использовании отдельного ключевого слова?

Два метода:

1:

var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setTime(a.getTime() + no_of_days * 86400000)

2: Как и в предыдущем методе

var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)
0
задан Priidik Vaikla 4 March 2019 в 21:50
поделиться

1 ответ

select distinct - это оператор, который гарантирует, что в результирующем наборе нет повторяющихся строк . То есть он отфильтровывает строки, в которых каждый столбец одинаков (а значения NULL считаются равными).

Он не смотрит на подмножество столбцов.

Иногда люди используют select distinct и не понимают, что это относится ко всем столбцам. Довольно забавно, когда первый столбец в круглых скобках - как будто круглые скобки имеют значение (они этого не делают).

Тогда у вас могут возникнуть ситуации, когда значения выглядят одинаково, но это не так.

Рассмотрим этот простой пример, где значения отличаются только пробелом в качестве конца строки:

select distinct x
from (select 'a' as x union all
      select 'a '
     ) y;

Здесь - это скрипта db <> с этим примером.

Это возвращает две строки, а не 1.

Без примеров данных трудно сказать, на какую из этих ситуаций вы ссылаетесь. Но строки, которые вы считаете «идентичными», на самом деле не совпадают.

0
ответ дан Gordon Linoff 4 March 2019 в 21:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: