Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
04.12.2019, 12:32
|
|||
|---|---|---|---|
LEFT JOIN + WHERE + Null |
|||
|
#18+
Здравствуйте! Есть @Table 1. В этой таблице есть поля mark1_id и mark2_id , которые соответственно ссылаются на справочные таблицы @Table2 и @Table3 . Есть такой SQL-запрос. SQL-запрос 1 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. date mark1_id mark2_id cost name1 name22019-01-01 1 1 1 Элемент1 Элемент12019-02-01 2 2 1 Элемент2 Элемент22019-03-01 3 1 1 Элемент3 Элемент12019-04-01 4 2 1 Элемент4 Элемент22019-05-01 NULL 1 1 NULL Элемент12019-06-01 2 2 1 Элемент2 Элемент22019-07-01 NULL 1 1 NULL Элемент12019-08-01 1 1 1 Элемент1 Элемент12019-09-01 NULL 1 1 NULL Элемент12019-10-01 2 NULL 1 Элемент2 NULL2019-11-01 NULL NULL 1 NULL NULL2019-12-01 1 2 1 Элемент1 Элемент2 Нужно получить данные, где mark1_id не равны 3 и 4, а mark2_id не равен 2. Добавляем фильтр SQL-запрос 2 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. date mark1_id mark2_id cost name1 name22019-01-01 1 1 1 Элемент1 Элемент12019-08-01 1 1 1 Элемент1 Элемент1 Обращаем внимание на то, что отсекаются строки с Null. А их не надо отсекать. Если так написать SQL-запрос 3 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. date mark1_id mark2_id cost name1 name22019-01-01 1 1 1 Элемент1 Элемент12019-05-01 NULL 1 1 NULL Элемент12019-07-01 NULL 1 1 NULL Элемент12019-08-01 1 1 1 Элемент1 Элемент12019-09-01 NULL 1 1 NULL Элемент12019-10-01 2 NULL 1 Элемент2 NULL2019-11-01 NULL NULL 1 NULL NULL Результат верный. Но, все таки есть вопросы. 1. Я правильно понимаю, что при фильтрации (SQL-запрос 2), значения Null автоматически отсекаются? 2. Данный пример является простым. На практике соединяются множество таблиц и важно, чтобы не потерять null для каждого признака (в данном случае mark1_id и mark2_id ). Скажите, какие есть варианты записи в WHERE более оптимально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.12.2019, 12:46
|
|||
|---|---|---|---|
LEFT JOIN + WHERE + Null |
|||
|
#18+
ferzmikk, Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.12.2019, 12:51
|
|||
|---|---|---|---|
LEFT JOIN + WHERE + Null |
|||
|
#18+
ferzmikk 1. Я правильно понимаю, что при фильтрации (SQL-запрос 2), значения Null автоматически отсекаются? Не совсем, ничего автоматические не отсекается. Просто Null не равно 2 и не равно 3 или 4. И даже Null не равен Null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.12.2019, 12:54
|
|||
|---|---|---|---|
LEFT JOIN + WHERE + Null |
|||
|
#18+
invm ferzmikk, Код: sql 1. 2. 3. 4. Я бы ограничился T2.[mark_id] not in (3, 4). Ибо ISNULL может понизить производительность . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.12.2019, 13:05
|
|||
|---|---|---|---|
LEFT JOIN + WHERE + Null |
|||
|
#18+
a_voronin invm ferzmikk, Код: sql 1. 2. 3. 4. Я бы ограничился T2.[mark_id] not in (3, 4). Ибо ISNULL может понизить производительность . Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.12.2019, 13:05
|
|||
|---|---|---|---|
LEFT JOIN + WHERE + Null |
|||
|
#18+
a_voronin Я бы ограничился T2.[mark_id] not in (3, 4). Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.12.2019, 13:19
|
|||
|---|---|---|---|
LEFT JOIN + WHERE + Null |
|||
|
#18+
invm a_voronin Я бы ограничился T2.[mark_id] not in (3, 4). Код: sql 1. Я не это имел ввиду. Я имел ввиду вот это -SQL-запрос 3 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.12.2019, 14:36
|
|||
|---|---|---|---|
|
|||
LEFT JOIN + WHERE + Null |
|||
|
#18+
Тройка, авторПросто Null не равно 2 и не равно 3 или 4. И даже Null не равен Null Неверно мыслите, null - это неизвестное значение, результат сравнения детерминированного с неизвестным неизвестен. Равно как и неизвестного с неизвестным также неизвестен. Чтобы неизвестные прошли сравнение их надо сделать детерминированными, т.е. присвоить значения, которые можно сравнивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.12.2019, 14:52
|
|||
|---|---|---|---|
LEFT JOIN + WHERE + Null |
|||
|
#18+
a_voronin Я не это имел ввиду. Я имел ввиду вот это Цитировали меня и писали о isnull, а оказалось, что вовсе не про мой ответ и не о isnull. Забавно. И даже если так, ваша рекомендация от этого правильнее не стала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.12.2019, 15:00
|
|||
|---|---|---|---|
LEFT JOIN + WHERE + Null |
|||
|
#18+
invm ferzmikk, Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.12.2019, 15:04
|
|||
|---|---|---|---|
LEFT JOIN + WHERE + Null |
|||
|
#18+
invm a_voronin Я не это имел ввиду. Я имел ввиду вот это Цитировали меня и писали о isnull, а оказалось, что вовсе не про мой ответ и не о isnull. Забавно. И даже если так, ваша рекомендация от этого правильнее не стала. 1) Это было про ваш ответ 2) Учить меня работе с NULL не надо Вы хотите сказать, что это Код: sql 1. 2. 3. 4. По скорости не уступает вот этому Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.12.2019, 15:45
|
|||
|---|---|---|---|
LEFT JOIN + WHERE + Null |
|||
|
#18+
a_voronin 1) Это было про ваш ответ 2) Учить меня работе с NULL не надо И, судя по вашему "замечательному" ответу, учить работе с null таки надо. Только вот, как показывает практика, бестолку... a_voronin Вы хотите сказать, что это ... По скорости не уступает вот этому ... Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.12.2019, 16:46
|
|||
|---|---|---|---|
LEFT JOIN + WHERE + Null |
|||
|
#18+
invm, туда же :) Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&tablet=1&tid=1686848]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
96ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 255ms |
| total: | 473ms |

| 0 / 0 |
