T-SQL LEFT JOIN для идентификатора bigint возвращает только идентификаторы ниже 101 в правой таблице

У меня есть две таблицы на Sql Server 2008. ownership с 3 полями и case с еще 3 полями, которые мне нужно объединить в поле идентификатора (bigint).

В целях тестирования я использую только одно поле из каждой таблицы. Это поле bigint и имеет значения от 1 до 170 (пока).

Мой запрос:

SELECT DISTINCT
    ownership.fCase,
    case.id
FROM
    ownership LEFT JOIN case ON (case.id=ownership.fCase)
WHERE 
    ownership.dUser='demo' 

Ожидалось, что это вернет 4 строки с одинаковыми значениями в обоих столбцах. Проблема в том, что последняя строка правой таблицы имеет значение null для fCase = 140. Это единственное значение выше 100.

Если я запускаю запрос без предложения WHERE, он показывает все строки в левой таблице, но значения справа появляются только в том случае, если ниже 101 в противном случае отображается нуль.

Может кто-нибудь помочь мне, я делаю что-то не так или это ограничение или ошибка?


person João Correia    schedule 28.08.2011    source источник
comment
Есть ли в таблице case строка, в которой есть id = 140? (например: что такое SELECT COUNT(*) FROM case WHERE id = 140?)   -  person NullUserException    schedule 28.08.2011
comment
Да, значение существует, как я уже сказал, от 1 до 170. в обеих таблицах.   -  person João Correia    schedule 28.08.2011
comment
@João Correia: ты действительно проверял? Или вы предполагаете?   -  person gbn    schedule 28.08.2011
comment
Я проверил после того, как вы спросили (на всякий случай). На самом деле это система, которая находится в производстве (mysql), но мы переносим ее на SQL Server. Когда создается одно дело, создается одна запись о владении, когда запись передается другому владельцу, создается новая запись о владении с другой датой и временем. То есть, если быть точным, для каждого случая существует по крайней мере одна запись о владении.   -  person João Correia    schedule 28.08.2011
comment
Это не может быть запрос, который вы на самом деле выполняете. Это даст вам синтаксическую ошибку.   -  person Martin Smith    schedule 29.08.2011


Ответы (1)


Падеж также является глаголом, поэтому его можно запутать. Попробуйте имена таблиц и столбцов в []. НАПРИМЕР. [case].[id] = [владение].[fCase]. Вы как бы дважды проверяете, что [case].[id] и [ownership].[fCase] ​​оба являются bigint. Если ваши текущие значения 1-170, то почему bigint (9 223 372 036 854 775 807)? Этот столбец принимает нули?

person paparazzo    schedule 28.08.2011