Обратите внимание, что я знаю, что это должно быть что-то простое и, вероятно, очевидное - я просто не вижу его ... Как указано, знаете ли вы, почему этот SQL-запрос возвращает пустой список при выполнении на SQL Server (через SQL Server Management Studio), при условии, что ЕСТЬ ДАННЫЕ В СООТВЕТСТВУЮЩИХ ТАБЛИЦЕ И ВСЕ ПАРАМЕТРЫ ЗАПРОСА УСТАНОВЛЕНЫ ПРАВИЛЬНО?Почему SQL Server SQL-запрос возвращает пустой список?
Этот вопрос связан с моим другим вопросом (Does anyone know why JPQL query on a view with SQL Server does not work? 'GetResultList' always returns empty list), но на данном этапе он фактически превращается в отдельную тему, поэтому я разместил его здесь. Вот запрос:
SELECT t1.Id,
t2.IdTransiti,
t1.CodiceCaricoPericoloso,
t1.Confidenza,
t1.Istante,
t1.IstanteRicezione,
t2.SQLServer_latitude,
t2.SQLServer_longitude,
t1.Partizione,
t1.Targa,
t1.TargaSecondaria,
t1.UtmcInstanceId,
t1.VelocitaStimata,
t1.IdColore,
t1.IdCorsia,
t1.IdMarca,
t1.IdModello,
t1.IdNazionalita,
t1.IdSerie,
t1.IdTipologiaVeicolo
FROM dbo.TransitiView t1
LEFT OUTER JOIN Serie t0
ON (t0.Id = t1.IdSerie)
LEFT OUTER JOIN dbo.Colori t3
ON (t3.Id = t1.IdColore)
LEFT OUTER JOIN Modelli t4
ON (t4.Id = t1.IdModello)
LEFT OUTER JOIN Marche t5
ON (t5.Id = t1.IdMarca),
TransitiPunti t2,
Corsie t6
WHERE ((((((t6.Attiva = 1)
AND (t1.Istante BETWEEN '2015-09-03 00:16:50.693'
AND '2015-09-03 23:16:50.693'))
AND ((t1.Partizione = 0) OR (t1.Partizione = 6)))
AND (t1.IdCorsia = 1))
AND (t2.IdTransiti = t1.Id))
AND (t6.Id = t1.IdCorsia))
ORDER BY t1.Istante DESC
EDIT:
Благодаря Russ ответа теперь я знаю, что происходит - SQL Server не любит пустые записи в внутренних соединениях - ODD !! Возможно, кто-то из вас знает, как и можно ли сделать внутренние соединения SQL Server «LIKE», где записи могут отсутствовать в соответствующих столбцах в связанных таблицах? Или ... По крайней мере, как заставить это работать для этого конкретного запроса?
Я думал, что сделаю это: ... ON (t2.IdTransiti = t1.Id или t2.IdTransiti - null), но это НЕ подходит для SQL Server. это не помогло :(
BONUS QUESTION: Любая идея, почему это нормально для MySQL, но не для SQL Server, когда таблицы, соединенные через внутренние соединения, могут быть пустыми? Почему это должно быть НЕ нормально в первую очередь?
EDIT:
оТВЕТ нА ПРОБЛЕМЫ:.. Благодаря Russ - я в основном получил его - это только мое замешательство и ничего более Пожалуйста, прочтите комментарии по принятому ответу Все стеблями из того, что я забыл, не было ow, что @SecondaryTable
аннотация в JPA переводится во внутреннее соединение, а затем двойная путаница - по моему пренебрежению ЧТО ОЧЕНЬ ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ ОЖИДАЕТСЯ ЗНАЧЕНИЯМИ В ОБЩИХ ТАБЛИЦЕ !!!
Спасибо всем за их усилия, и я думаю, мне нужно немного подумать, прежде чем говорить о вещах в следующий раз :).
Не следует смешивать Явный синтаксис и старые неявный присоединиться !!! Слишком легко сделать ошибки - используйте только новый, явный синтаксис соединения! – jarlh
Переместите условия t2 и т. Д. Из WHERE в ON, чтобы получить истинное значение LEFT JOIN. (Как сейчас, он выполняет как регулярное внутреннее соединение ...) – jarlh
@jarhl Спасибо, Jahrl! Но что интересно, этот запрос на самом деле автогенерируется драйвером SQL sqljdbc4.jar из моего проекта, я бы ожидал, что он не должен ошибаться? Вы знаете, что может быть причиной здесь? Кроме того, знаете ли вы, если в этом запросе есть что-то не так, потому что он выполняется без ошибок, за исключением того, что он просто возвращает пустой список. – Pawel