![]() |
|
Модераторы: Akina |
![]()
|
|
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: нет Всего: 20 |
Можноли в данной ф-ии оптимизировать SQL запросы
Это сообщение отредактировал(а) Artemon - 9.2.2006, 20:38 -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: нет Всего: 20 |
Не тот код привел вот то, что хотел показать
Добавлено @ 20:59 Другими словами - имеется две таблицы: 1) GENRES ID_GENRE - numeric GENRE - str 2) ARTISTS ID_ARTISTS - numeric ARTIST - str Вопрос: Как из ARTISTS выбрать все записи зная только GENRE. P.S. Способ который я привел - работает - но он бесспорно УРОДЛИВ. Мне почему-то кажется, что данную задачу - можно решить одним запросом............... -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| boevik |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: 15 Всего: 35 |
Можно использовать subquery или join.
Но лучше join
-------------------- Никогда не говори никогда |
||||
|
|||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: нет Всего: 20 |
Спасибо Boevik, все работает.
Еще один вопрос на этуже т ему. Имеются две таблицы: 1) GENRES ID_GENRE - numeric GENRE - str 2) ARTISTS ID_ARTIST - numeric ARTIST - str Как выполнить следующую задачу: 1) В таблице GENRES по полю GENRE найти записи по заданному тексту например "РОК" и удалить их все кроме первой. 2) В таблице ARTISTS изменить ID_GENRE удаленных записей (1) на ID_GENRE оставшейся записи. Я это реализовал, но как мне кажется опять криво. Помогите пожалуйста. bool WORK_WITH_BASE::ChangeGenre ( AnsiString From, AnsiString To ) { AnsiString Str = ""; long int ID_GENRE, tmp; Str = "UPDATE GENRES SET GENRE = '" + To + "' " "WHERE GENRE = '" + From + "' " ; if( ExecuteAnySQL(Str, QueryGenres) != ERROR_ALL_OK) return FALSE; Str = "SELECT ID_GENRE FROM GENRES " "WHERE GENRE = '" + To + "' " ; if( ExecuteAnySQL(Str, QueryGenres) != ERROR_ALL_OK) return FALSE; if( QueryGenres->RecordCount ) { QueryGenres->First(); ID_GENRE = QueryGenres->FieldByName("ID_GENRE")->Value; } while( QueryGenres->RecordCount > 1 ) { QueryGenres->Last(); tmp = QueryGenres->FieldByName("ID_GENRE")->Value; Str = "UPDATE ARTISTS SET ID_GENRE = " + IntToStr(ID_GENRE) + " " "WHERE ID_GENRE = " + IntToStr(tmp) + " " ; if( ExecuteAnySQL(Str, QueryArtists) != ERROR_ALL_OK) return FALSE; QueryGenres->Delete(); } return true; } -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| boevik |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: 15 Всего: 35 |
Примерно так.
Начнем со втoрой задачи
После этого можно удалять записи из GENRES
-------------------- Никогда не говори никогда |
||||
|
|||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: нет Всего: 20 |
Boevik - ты мне очень помог, мне даже вголову не приходило так организовать запросы.
Еще один вопрос типа предыдущих двух появился, сейчас я свое решение напишу, а если оно опять будет уродское я его покажу. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: нет Всего: 20 |
Имеются 3 таблицы:
1) ARTISTS ID_ARTISTS - numeric ID_GENRE - numeric ARTIST - str 2) ALBUMS ID_ALBUM - numeric ID_ARTIST - numeric ALBUM - str ................ ................. 3) SONGS ID_SONG - numeric ID_ALBUM - numeric SONG - str Задача - Удалить Артиста его альбомы и композиции. Помогите сделать все проще. Мое решение опять кривое, но работает: bool WORK_WITH_BASE::DeleteArtist( AnsiString ArtName ) { long int ID_ARTIST, ID_ALBUM; AnsiString Str = ""; Str = "SELECT ID_ARTIST FROM ARTISTS " "WHERE ARTIST = '" + ArtName + "' " ; if( ExecuteAnySQL(Str, QueryArtists) != ERROR_ALL_OK) return FALSE; while( QueryArtists->RecordCount ) { QueryArtists->First(); ID_ARTIST = QueryArtists->FieldByName("ID_ARTIST")->Value; Str = "SELECT ID_ALBUM FROM ALBUMS " "WHERE ID_ARTIST = '" + IntToStr(ID_ARTIST) + "' " ; if( ExecuteAnySQL(Str, QueryAlbums) != ERROR_ALL_OK) return FALSE; while( QueryAlbums->RecordCount ) { QueryAlbums->First(); ID_ALBUM = QueryAlbums->FieldByName("ID_ALBUM")->Value; Str = "SELECT ID_SONG FROM SONGS " "WHERE ID_ALBUM = '" + IntToStr(ID_ALBUM) + "' " ; if( ExecuteAnySQL(Str, QuerySongs) != ERROR_ALL_OK) return FALSE; while( QuerySongs->RecordCount ) { QuerySongs->First(); QuerySongs->Delete(); // Delete Song } QueryAlbums->Delete(); // Delete Album } QueryArtists->Delete(); // Delete Artist } return true; } -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| boevik |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: 15 Всего: 35 |
По той же схеме как и раньше.
Естественно, не нужно ни каких циклов и т.п.. Все выполняется в 3 вызова. -------------------- Никогда не говори никогда |
||||||
|
|||||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: нет Всего: 20 |
Супер!!!!
Спасибо -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
![]()
|
| Правила форума "MS SQL" | |
|
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS SQL Server | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |