|
|
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
добрый день.. хочу понять составные запросы.. есть 3 таблицы client(clientid,surname,phone,...), clientseason(cseasonid,clientid,seasonid,...), season(seasonid,typename,...) допустим мне нужно вывести фамилии клиентов и телефоны, у которых тип абонемента "студенческий".. вот мой запрос.. select surname, phone from client where clientid=( select clientid from clientseason where seasonid= ( select seasonid from season where typeseason = 'студенческий 8')) выдаёт ошибку.. Multiple rows in singleton select Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2014, 13:10:08 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
snowbrookвыдаёт ошибку.. Multiple rows in singleton selectвсё правильно выдаёт. тебе перевести? а вообще join поможет отцу русской демократии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2014, 13:11:29 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
перевод понятен.. как исправить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2014, 13:13:23 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
snowbrook> допустим мне нужно вывести фамилии клиентов и телефоны, snowbrook> у которых тип абонемента "студенческий".. Такое не подзапросами (а не составными запросами, как ты сказал) надо делать, а явными (join) или неявными соединениями таблиц. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2014, 13:13:29 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
snowbrookперевод понятен.. как исправить?join поможет отцу русской демократии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2014, 13:14:09 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. Прочитай лекции, справочник SQL. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2014, 13:17:03 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
благодарю, читаю как раз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2014, 13:33:17 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
а теперь, чтоб помимо этих данных ещё выводились данные datestart из clientseason.. делаю: select surname, phone, datestart from client c, clientseason cs inner join clientseason on c.clientid = cs.clientid inner join season s on (cs.seasonid = s.seasonid) and (s.typeseason = 'студенческий 8') выводит почему-то не то, что хотелось бы.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2014, 11:39:39 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
snowbrookвыводит почему-то не то, что хотелось бы.. Очевидно потому, что ты пишешь не то что хотелось бы... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2014, 12:45:35 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
RTFM: http://ibase.ru/devinfo/joins.htm Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2014, 12:56:11 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
отличная статья! благодарности! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2014, 13:14:06 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
snowbrookдобрый день.. хочу понять составные запросы.. есть 3 таблицы client(clientid,surname,phone,...), clientseason(cseasonid,clientid,seasonid,...), season(seasonid,typename,...) допустим мне нужно вывести фамилии клиентов и телефоны, у которых тип абонемента "студенческий".. вот мой запрос.. select surname, phone from client where clientid=( select clientid from clientseason where seasonid= ( select seasonid from season where typeseason = 'студенческий 8')) выдаёт ошибку.. Multiple rows in singleton select Заранее спасибо! а зачем такое извращение? ты бы еще штук 5 скрытых джоинов сделал в веаре... Код: sql 1. 2. 3. 4. 5. всех полей в твоих таблицах не знаю... Там где ID это интуитивно догадываюсь что такие поля :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 10:50:24 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
snowbrookа теперь, чтоб помимо этих данных ещё выводились данные datestart из clientseason.. делаю: select surname, phone, datestart from client c, clientseason cs inner join clientseason on c.clientid = cs.clientid inner join season s on (cs.seasonid = s.seasonid) and (s.typeseason = 'студенческий 8') выводит почему-то не то, что хотелось бы.. Отучайся от такого рода запросов... если данных не много то обрабатываться будет нормально! Но в таблицах где миллионы строк, такие селекты будут обрабатываться часами... это я об этом: Код: sql 1. а это вобще бред... что ты этим хотел сделать? Код: sql 1. 2. 3. 4. особенно не пойму Код: plsql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 10:55:50 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам Код: sql 1. 2. 3. 4. Прочитай лекции, справочник SQL. у него веар только по одной таблице... по этому плясать лучше начинать от нее Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 11:01:28 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
anplу него веар только по одной таблице... по этому плясать лучше начинать от нее уверен что " плясать лучше начинать от нее "??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 11:20:09 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
snowbrookа теперь, чтоб помимо этих данных ещё выводились данные datestart из clientseason.. делаю: select surname, phone, datestart from client c, clientseason cs inner join clientseason on c.clientid = cs.clientid inner join season s on (cs.seasonid = s.seasonid) and (s.typeseason = 'студенческий 8') выводит почему-то не то, что хотелось бы.. алиасы таблицы необходимо использовать, чтобы не путаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 11:24:51 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
m7manplу него веар только по одной таблице... по этому плясать лучше начинать от нее уверен что " плясать лучше начинать от нее "??? уверен что Код: sql 1. 2. 3. 4. 5. будет выполнятся быстрее чем: Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 11:25:47 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
anpl, а я вот не уверен в этом. Более того я уверен что по времени выполнения разницы не будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 11:44:32 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
m7manpl, а я вот не уверен в этом. Более того я уверен что по времени выполнения разницы не будетнужны планы, чтобы не спорить. выкладывайте уже кто-нибудь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 11:46:04 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
m7manpl, а я вот не уверен в этом. Более того я уверен что по времени выполнения разницы не будет разница будет пропорциональна количеству строк в таблицах... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 11:48:07 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
roadsterm7manpl, а я вот не уверен в этом. Более того я уверен что по времени выполнения разницы не будетнужны планы, чтобы не спорить. выкладывайте уже кто-нибудь. а вот здесь согласен! ) нужны планы... не известно что там за база... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 11:48:53 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
anplа вот здесь согласен! ) нужны планы... не известно что там за база...надо нагенерить данных. таблиц немного. давайте уже, займитесь кто-нибудь. ЗЫ просто интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 11:56:44 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
roadsteranplа вот здесь согласен! ) нужны планы... не известно что там за база...надо нагенерить данных. таблиц немного. давайте уже, займитесь кто-нибудь. ЗЫ просто интересно. Как то так С ключами и индексами Plan PLAN JOIN (JOIN (S INDEX (SEASON_TYPESEASON), CS INDEX (RDB$FOREIGN58)), CL INDEX (RDB$PRIMARY79)) Adapted Plan PLAN JOIN (JOIN (S INDEX (SEASON_TYPESEASON), CS INDEX (FK_SEASON_CLIENTSEASON_SEASONID)), CL INDEX (INTEG_223)) ------ Performance info ------ Prepare time = 0ms Execute time = 15ms Avg fetch time = 7,50 ms Current memory = 10 649 144 Max memory = 18 250 804 Memory buffers = 256 Reads from disk to cache = 7 Writes from cache to disk = 0 --- Plan PLAN JOIN (CL NATURAL, CS INDEX (RDB$FOREIGN59), S INDEX (RDB$PRIMARY23)) Adapted Plan PLAN JOIN (CL NATURAL, CS INDEX (FK_CLIENT_CLIENTSEASON_CLIENTID), S INDEX (INTEG_52)) ------ Performance info ------ Prepare time = 0ms Execute time = 624ms Avg fetch time = 312,00 ms Current memory = 10 554 192 Max memory = 18 250 804 Memory buffers = 256 Reads from disk to cache = 3 349 Writes from cache to disk = 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 12:34:34 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
первый план на Код: sql 1. 2. 3. 4. 5. второй Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 12:36:04 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
anplReads from disk to cache = 7 ... Reads from disk to cache = 3 349вау прикольно. надо запомнить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 12:36:37 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
anpl, Код: sql 1. 2. 3. 4. 5. а если вот так? мне кажется тут дело не в left/inner а в том что s.typeseason = 'студенческий 8' в условие соединения воткнуто ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 12:41:02 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
Тут дело в том что смотря в какой таблице будет больше всего данных! в 90% случаях первый селект будет выполнятся быстрей... но если в таблице season будет мало строк, а остальные таблицы будут тяжелые (пару миллионов строк) то скорость выполнения будет одинаковой. А по логике во втором запросе сначала джойнится вся таблица clientseason и client с season а потом только отсекается лишнее, в первом варианте отсекается все лишнее а потом идет джоин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 12:46:01 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
anplпервый план на Код: sql 1. 2. 3. 4. 5. второй Код: sql 1. 2. 3. 4. японский бог, мой первый ответ был на 15860270 там лефтом и не пахнет а когда отвечал на это 15860427 то на запросы просто не обратил внимания ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 12:48:18 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
Симонов Денисanpl, Код: sql 1. 2. 3. 4. 5. а если вот так? мне кажется тут дело не в left/inner а в том что s.typeseason = 'студенческий 8' в условие соединения воткнуто и вот так Код: sql 1. 2. 3. 4. То время планы и время выполнения должны быть одинаковые ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 12:54:26 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
anpl, оптимизатор для того и существует чтобы самому определять с каких таблиц начинать соединение. Кроме того, у меня подозрение, что Plan PLAN JOIN (CL NATURAL, CS INDEX (RDB$FOREIGN59), S INDEX (RDB$PRIMARY23)) не может быть от запроса Код: sql 1. 2. 3. 4. т.к. в нём нет таблицы с алиасом CL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 12:56:35 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
Симонов Денисanpl, оптимизатор для того и существует чтобы самому определять с каких таблиц начинать соединение. Кроме того, у меня подозрение, что Plan PLAN JOIN (CL NATURAL, CS INDEX (RDB$FOREIGN59), S INDEX (RDB$PRIMARY23)) не может быть от запроса Код: sql 1. 2. 3. 4. т.к. в нём нет таблицы с алиасом CL Код: sql 1. 2. 3. 4. вот так выглядел селект Ладно не хочу спорить! Что вам мешает сейчас взять и сделать подобные селекты? По поводу Код: sql 1. 2. 3. 4. 5. Plan PLAN JOIN (CL NATURAL, CS INDEX (RDB$FOREIGN59), S INDEX (RDB$PRIMARY23)) Adapted Plan PLAN JOIN (CL NATURAL, CS INDEX (FK_CLIENT_CLIENTSEASON_CLIENTID), S INDEX (INTEG_52)) ------ Performance info ------ Prepare time = 0ms Execute time = 609ms Avg fetch time = 304,50 ms Current memory = 10 562 264 Max memory = 18 250 804 Memory buffers = 256 Reads from disk to cache = 3 356 Writes from cache to disk = 0 Fetches from cache = 226 301 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 13:06:36 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
anpl, у меня цель не спорить. Если оптимизатор не понимает чего-то, то его надо научить, т.е. необходимо разобраться почему так и возможно написать тикет в трекер. Что касается последнего запроса, то я вот не понимаю почему оптимизатор не стал применять индекс SEASON_TYPESEASON и сам не догадался что дешевле будет зайти с таблицы season s. Единственная пока догадка что значения в этом поле распределены слишком неравномерно, т.е. большинство записей typeseason <> 'студенческий 8', но при этом равны какому-то другому значению многократно повторяющемуся. Таким образом, индекс имеет плохую селективность, а гистограммы значений пока не поддерживаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 13:27:00 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
Симонов Денисanpl, у меня цель не спорить. Если оптимизатор не понимает чего-то, то его надо научить, т.е. необходимо разобраться почему так и возможно написать тикет в трекер. Что касается последнего запроса, то я вот не понимаю почему оптимизатор не стал применять индекс SEASON_TYPESEASON и сам не догадался что дешевле будет зайти с таблицы season s. Единственная пока догадка что значения в этом поле распределены слишком неравномерно, т.е. большинство записей typeseason <> 'студенческий 8', но при этом равны какому-то другому значению многократно повторяющемуся. Таким образом, индекс имеет плохую селективность, а гистограммы значений пока не поддерживаются. вы правильно рассуждаете... в таблице SEASON 100к записей и только одна 'студенческий 8' и в clientseason 10 записей в client 30 Я выше упоминал... что огромное значение имеет размеры каждой из таблиц... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 13:40:59 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
anpl, дело не в размерах, а в равномерности распределений значений TYPESEASON. В большинстве случаев оптимизатор сам способен выбрать порядок соединения таблиц учитывая их размер и селективность индексов. http://www.ibase.ru/devinfo/dataaccesspaths.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 13:47:10 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
в clientseason 10 записей в client 30 извиняюсь... дезинформировал в clientseason 30 строк в client 10 строк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 13:47:32 |
|
||
|
составной запрос
|
|||
|---|---|---|---|
|
#18+
Симонов Денисanpl, дело не в размерах, а в равномерности распределений значений TYPESEASON. В большинстве случаев оптимизатор сам способен выбрать порядок соединения таблиц учитывая их размер и селективность индексов. http://www.ibase.ru/devinfo/dataaccesspaths.htm Не поверите! именно эта ссылка у меня уже минут 10 открыта ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 13:49:17 |
|
||
|
|

start [/forum/topic.php?all=1&fid=40&tid=1563716]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
288ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
86ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 611ms |

| 0 / 0 |
