|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
В базе данных построены два запроса, каждый из которых собирает некоторый набор записей. Эти запросы используются как источник данных третьего запроса, причём применяется LEFT JOIN. Соответственно я ожидаю, что для тех записей одного подзапроса, которым нет соответствия во втором подзапросе, на месте полей вывода из второго подзапроса будет Null... а вот хрен! И я не понимаю, почему... Теперь конкретно. Вот первый подзапрос SubQuery1 Код: sql 1. 2. 3.
SubQuery2 Код: sql 1. 2. 3. 4. 5. 6.
Вот запрос, использующий их: Кроссирование-1 Код: sql 1. 2. 3.
или он же, но с подстановкой текста: Кроссирование-2 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Понятно, для тех записей первого подзапроса, которым нет соответствия во втором, я в полях SubQuery2.Порт2 AS Порт2 и SubQuery2.Порт1 AS Код2 ожидаю увидеть Null... и в поле SubQuery2.Порт1 AS Код2 я этот Null и получаю... но вижу вместо него в поле SubQuery2.Порт2 AS Порт2 литерал " - ". Наблюдение демонстрирует скриншот ("Кроссирование-2" - это имя сохранённого статически последнего запроса, который с подстановками). ПОЧЕМУ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2017, 15:32 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
Akinaв поле SubQuery2.Порт1 AS Код2 я этот Null и получаю... но вижу вместо него в поле SubQuery2.Порт2 AS Порт2 литерал " - " Поробуйте вместо: Панели.Наименование & ' - ' & Порты.Порт Написать: Панели.Наименование + ' - ' & Порты.Порт Или (если поле "Порт" не числовое): Панели.Наименование + ' - ' + Порты.Порт ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2017, 16:04 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ) , вывод не изменился... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2017, 16:42 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
Akina, а так ? Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2017, 17:27 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
Как этого избежать - и так ясно Код: sql 1.
Но непонятно, какого хрена... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2017, 19:52 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
Akina, автор...ПОЧЕМУ???... если не получилось, как советовал Анатолий, то, предполагаю , что там Empty , а не Null Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2017, 19:57 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
guest_rusimportпредполагаю , что там Empty , а не NullПосмотри на скриншоте, какой код получает данные. Поле DAO-рекордсета не может вернуть Empty... Равно как и при LEFT JOIN для не имеющих соответствия записей в полях никак не может быть Empty. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2017, 20:36 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
Akina, лень пример делать... может выложишь кусочек базы с этой проблемкой (mdb)? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2017, 20:46 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
Akina, сделал примерчик по образу и подобию, проверил совет Анатолия - всё работает как надо ... зря пример не прилагаешь, долго можно без него гадать в чем проблема... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2017, 22:29 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
guest_rusimportAkina, сделал примерчик по образу и подобию, проверил совет Анатолия - всё работает как надо ... зря пример не прилагаешь, долго можно без него гадать в чем проблема... на всякий случай примерчик приложу ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 07:13 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
Выкладываю почищенную от ненужного хлама БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 08:46 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
Akina, у меня твой пример работает без проблем (access 2003, только поправил запрос "Кроссирование-2" так, как советовал Анатолий) [/SRC] SELECT SubQuery1.Порт1 AS Порт1, SubQuery2.Порт2 AS Порт2, SubQuery1.Код AS Код1, SubQuery2.Порт1 AS Код2 FROM [SELECT Панели.Наименование & ' - ' & Порты.Порт AS Порт1, Порты.Код FROM Панели INNER JOIN Порты ON Панели.Код = Порты.Панель ]. AS SubQuery1 LEFT JOIN [SELECT Кроссировки.Порт1, Панели.Наименование >>> + <<< ' - ' & Порты.Порт AS Порт2 FROM Панели INNER JOIN ( Порты INNER JOIN Кроссировки ON Порты.Код = Кроссировки.Порт2 ) ON Панели.Код = Порты.Панель ]. AS SubQuery2 ON SubQuery1.Код = SubQuery2.Порт1; [/SRC] ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 08:59 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
Akina, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 09:01 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
guest_rusimport , спасибо. КАК исправить - решено. Осталось понять, ПОЧЕМУ в исходном виде результат далёк от ожидаемого. И соответственно ПОЧЕМУ внесённые изменения исправили вывод. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 09:21 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
Akina guest_rusimport , спасибо. КАК исправить - решено. Осталось понять, ПОЧЕМУ в исходном виде результат далёк от ожидаемого. И соответственно ПОЧЕМУ внесённые изменения исправили вывод. Ну, так "+" и "&" по разному работают , я же выше приводил результат Код: vbnet 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 09:26 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
guest_rusimport , это не объясняет появления не-Null значений в запросе Кроссирование-1 из начального сообщения. Или остаётся предположить, что движок вместо выполнения указанного запроса выполняет подстановку текстов подзапросов, что и приводит к неправильному результату. И уж тем более не объясняет, почему вместо добавления Null-значений во все поля правой таблицы для отсутствующих записей производится вычисление выражения с использованием Null-значения. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 09:49 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
Akina, а по-моему всё очень логично, иначе бы Анатолий не заметил это сразу... кстати, может он сам более понятнее объяснит ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 10:06 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
guest_rusimportпо-моему всё очень логично Не вижу логики в том что в запросе Код: vbnet 1. 2. 3.
в поле t2.f2 оказываются не-NULL... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 10:09 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
Akinaguest_rusimportпо-моему всё очень логично Не вижу логики в том что в запросе Код: vbnet 1. 2. 3.
в поле t2.f2 оказываются не-NULL... у вас это поле конкатенируется из трех слагаемых в подзапросе, два из которых при левом внешнем объединении равны NULL ... в этой конкатенации и всё дело ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 10:16 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
Akinaguest_rusimportпо-моему всё очень логично Не вижу логики в том что в запросе Это бага Акцесса, тут было похожее . ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 10:18 |
|
Странный вывод запроса.
|
|||
---|---|---|---|
#18+
guest_rusimportу вас это поле конкатенируется из трех слагаемых в подзапросе, два из которых при левом внешнем объединении равны NULLВот мне и странно, что конкатенация выполняется ПОСЛЕ связывания, что не соответствует тексту запроса. йцкйцкЭто бага АкцессаУже тоже пришёл к этому выводу. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 10:38 |
|
|
start [/forum/topic.php?fid=45&fpage=74&tid=1612377]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
4ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 341ms |
total: | 469ms |
0 / 0 |