|
|
|
Лефт джоин селекта
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. Теперь мы хотим на каждую из этих 20 полезных "базовых" записей подцепить "справочные" данные. Это всегда делается через left join по принципу если есть, то ок, если нет - то и фиг с ним. Но в данном случае бяка заключается в том, что base.id = some.baseId то есть по айдишникам, по которым мы будем подцеплять справочные записи их в "справочной" таблице может быть несколько. Насколько "криминально" лефт-джойнить селект и как замутить, чтобы исключить выборку по всей базе, а сузить сразу до списка айдишников, которые уже найдены по "базовой" таблице? Код: sql 1. 2. 3. 4. 5. Может вот так можно? Но что-то страшновато...)) Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 20:47:30 |
|
||
|
Лефт джоин селекта
|
|||
|---|---|---|---|
|
#18+
Не вижу смысла ни в этих запросах, ни в самой задаче. Но почему не сделать так: Код: sql 1. 2. 3. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 20:54:59 |
|
||
|
Лефт джоин селекта
|
|||
|---|---|---|---|
|
#18+
miksoftНе вижу смысла ни в этих запросах, ни в самой задаче. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Генерит такой вывод: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Тогда как выдача должна содержать всего 3 записи из таблицы baser, а faser лишь дает справочные данные по самым "верхим" ("свежим") рядам (max(faser.id)) Код: plaintext 1. 2. 3. 4. Вот почему обычный джоин не катит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:24:02 |
|
||
|
Лефт джоин селекта
|
|||
|---|---|---|---|
|
#18+
Читать ФАК по выбору первой записи в группе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:53:11 |
|
||
|
Лефт джоин селекта
|
|||
|---|---|---|---|
|
#18+
Lumix, ты все не уймешься... я же тебе писал, и ты даже что-то понял вроде... join - дешевая операция, её не нужно экономить. select не нужно писать особым образом, чтобы заставить сервер каким-то особенным образом его исполнять, для этого надо писать хинты. то, что ты пытаешься сделать, вообще не нужно делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2015, 12:06:12 |
|
||
|
Лефт джоин селекта
|
|||
|---|---|---|---|
|
#18+
Lumix, а умножение строк - совсем другая проблема, очень странно, что ты поднимаешь справочники не по связи один ко многим, а по многие ко многим. так вообще не должно быть. с базой у вас что-то не так... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2015, 12:09:46 |
|
||
|
Лефт джоин селекта
|
|||
|---|---|---|---|
|
#18+
MasterZivLumix, а умножение строк - совсем другая проблема, очень странно, что ты поднимаешь справочники не по связи один ко многим, а по многие ко многим. так вообще не должно быть. с базой у вас что-то не так... ну, это не совсем справочники в классическом понимании... это не то же самое, что список городов... это больше похоже на теги... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2015, 12:22:50 |
|
||
|
Лефт джоин селекта
|
|||
|---|---|---|---|
|
#18+
LumixMasterZivLumix, а умножение строк - совсем другая проблема, очень странно, что ты поднимаешь справочники не по связи один ко многим, а по многие ко многим. так вообще не должно быть. с базой у вас что-то не так... ну, это не совсем справочники в классическом понимании... это не то же самое, что список городов... это больше похоже на теги... ОК, тогда вопрос -- тебе нужно видеть там все теги ? Нужно -- JOIN-и. Не нужно -- возми один, пометь как главный, и JOIN-и с ним только. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2015, 12:28:53 |
|
||
|
Лефт джоин селекта
|
|||
|---|---|---|---|
|
#18+
LumixНасколько "криминально" лефт-джойнить селект и как замутить, чтобы исключить выборку по всей базе, а сузить сразу до списка айдишников, которые уже найдены по "базовой" таблице? Не криминально. Код: sql 1. 2. 3. 4. 5. Может вот так можно? Но что-то страшновато...)) Можно. Но криминал в этом подзапросе: Код: sql 1. group by нужен, и * нужно убрать. Код: sql 1. 2. 3. 4. 5. 6. 7. [/quot] У тебя тут тавтология: where baseId in (select baseId from base limit 20) ) y on y.baseId = x.baseId Лишнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2015, 12:32:16 |
|
||
|
Лефт джоин селекта
|
|||
|---|---|---|---|
|
#18+
MasterZivНе нужно -- возми один, пометь как главный, и JOIN-и с ним только. Вот это реально охренительное решение!!! Маркер основного тега!!!! Просто будет отдельная процедура, которая периодически будет проставлять булевый флажок, а затем добавим в left join b on x.baseId = y.baseId && isMain = 1 и у нас сразу будет "одноуровневое умножение". Так и сделаем! Спасибо огромное!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2015, 12:34:53 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39078517&tid=1832608]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 334ms |

| 0 / 0 |
