Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
join 1:1 для неоднозначных данных
|
|||
|---|---|---|---|
|
#18+
Есть таблица t1 с полями CODE и DEVTYPER. CODE это идентификатор, DEVTYPER это тип записи, может принимать значения 3 и 16. Есть таблица t2 с полями CODE и DEVTYPER. Таблица подобна таблице t2, но содержит записи других типов и DEVTYPER может принимать значения 4. Еще есть таблица t3 с полями CODE и рядом других полей. Есть таблица ta с полями CODE и TYPER, в которой содержаться дополнительные данные для таблиц t1, t2, t3: - для таблицы t3 условие соединения такое: ta.CODE=t3.CODE and ta.TYPER=1 - для таблицы t2 условие соединения такое: ta.CODE=t2.CODE and ta.TYPER=t2.DEVTYPER - для таблицы t1 условие соединения такое: ta.CODE=t1.CODE and ta.TYPER=3 Но иногда по каким-то причинам для t1.DEVTYPER=16 возможно ta.TYPER=16, поэтому для соединения с t1 мне нужен такой алгоритм: 1. Делаю ta.CODE=t1.CODE and ta.TYPER=3, если в результате соединения получается одна строка (соединение 1:1), то ок. 2. Делаю ta.CODE=t1.CODE and ta.TYPER=t1.DEVTYPER, если в результате соединения получается одна строка (соединение 1:1), то ок. 3. Делаю ta.CODE=t1.CODE, если в результате соединения получается несколько строк, то отбираю первую строку для критерия сортировки (в порядке предпочтения) DEVTYPER=3, DEVTYPER=16. Можно ли такое соединение в MySQL сделать малой кровью? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 09:58 |
|
||
|
join 1:1 для неоднозначных данных
|
|||
|---|---|---|---|
|
#18+
Alibek B.для соединения с t1 мне нужен такой алгоритм: 1. Делаю ta.CODE=t1.CODE and ta.TYPER=3, если в результате соединения получается одна строка (соединение 1:1), то ок. 2. Делаю ta.CODE=t1.CODE and ta.TYPER=t1.DEVTYPER, если в результате соединения получается одна строка (соединение 1:1), то ок. 3. Делаю ta.CODE=t1.CODE, если в результате соединения получается несколько строк, то отбираю первую строку для критерия сортировки (в порядке предпочтения) DEVTYPER=3, DEVTYPER=16. Нахрена надо было описывать в пень ненужные t2 и t3? Alibek B.если в результате соединения получается одна строка (соединение 1:1), то ок.И далее не обрабатывать? Для такого случая следует отбирать наиболее широкий вариант (ON ta.CODE=t1.CODE), а затем строить выражение, которое по мере продвижения по списку условий возрастает (или убывает), типа Код: sql 1. 2. 3. 4. 5. 6. и при сортировке по нему выбирать первую запись из группы (см. FAQ). Альтернативный вариант - UNION каждого из запросов, дополненного статическим полем "веса условия". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 10:37 |
|
||
|
join 1:1 для неоднозначных данных
|
|||
|---|---|---|---|
|
#18+
AkinaНахрена надо было описывать в пень ненужные t2 и t3? Потому что в них тоже есть CODE (и даже DEVTYPER), с которыми могут быть совпадения. Akinaи при сортировке по нему выбирать первую запись из группы (см. FAQ). Имеется ввиду эти способы со всеми их особенностями? FAQ старый, я надеялся, что в новых версиях MySQL появилось что-то более удобное. AkinaАльтернативный вариант - UNION каждого из запросов, дополненного статическим полем "веса условия". Пожалуй да, это будет проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 11:12 |
|
||
|
join 1:1 для неоднозначных данных
|
|||
|---|---|---|---|
|
#18+
Alibek B.Потому что в них тоже есть CODE (и даже DEVTYPER), с которыми могут быть совпадения.Да наплевать, что там есть... В алгоритме выбора они упоминаются? нет. На итоговую выборку влияют? нет. Нахрена? Alibek B.Имеется ввиду эти способы со всеми их особенностями?Именно. Alibek B.FAQ старыйFAQ - актуальный. Alibek B.я надеялся, что в новых версиях MySQL появилось что-то более удобное.Да не вопрос - версия 8.0, там есть оконные функции... будешь ставить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 11:18 |
|
||
|
join 1:1 для неоднозначных данных
|
|||
|---|---|---|---|
|
#18+
AkinaНа итоговую выборку влияют? Влияют. Если вообще не учитывать TYPER, то получившиеся неоднозначности (из таблиц t2 и t3) невозможно будет разрешить. Поэтому для TYPER=4 и TYPER=1 их нужно исключать (если собирать запрос из UNION) или учитывать (если использовать один сложный запрос). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 11:25 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39613284&tid=1829995]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 147ms |

| 0 / 0 |
