Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите избавиться от подзапросов, необходима оптимизация 
:(
    Опции темы
comcon1
Дата 26.10.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: нет
Всего: 17



У меня плоховато с синтаксисом, помогите плз оптимизировать вот такой запрос:

есть таблица atoms, в ней есть id и НЕуникальное name
есть таблица angles, в ней есть id и ссылки на name-ы атомов, которые образуют угол, необходимо выполнить следующее:
Код

(SELECT
  angles.id AS bid,
  ( SELECT MIN( id ) FROM atoms WHERE atoms.name = angles.i AND atoms.ffield = 1) AS aid1,
  ( SELECT MIN( id ) FROM atoms WHERE atoms.name = angles.j AND atoms.ffield = 1) AS aid2,
  ( SELECT MIN( id ) FROM atoms WHERE atoms.name = angles.k AND atoms.ffield = 1) AS aid3,
  0 AS inv
FROM angles
WHERE angles.ffield = 1
 AND ( SELECT MIN( znuc ) FROM atoms WHERE atoms.name = angles.i AND atoms.ffield = 1) = 6
 AND ( SELECT MIN( znuc ) FROM atoms WHERE atoms.name = angles.j AND atoms.ffield = 1) = 6
 AND ( SELECT MIN( znuc ) FROM atoms WHERE atoms.name = angles.k AND atoms.ffield = 1) = 1)
UNION 
(SELECT
  angles.id AS bid,
  ( SELECT MIN( id ) FROM atoms WHERE atoms.name = angles.i AND atoms.ffield = 1 AS aid1,
  ( SELECT MIN( id ) FROM atoms WHERE atoms.name = angles.j AND atoms.ffield = 1) AS aid2,
  ( SELECT MIN( id ) FROM atoms WHERE atoms.name = angles.k AND atoms.ffield = 1) AS aid3,
  1 AS inv
FROM angles
WHERE angles.ffield = 1
 AND ( SELECT MIN( znuc ) FROM atoms WHERE atoms.name = angles.i AND atoms.ffield = 1) = 1
 AND ( SELECT MIN( znuc ) FROM atoms WHERE atoms.name = angles.j AND atoms.ffield = 1) = 6
 AND ( SELECT MIN( znuc ) FROM atoms WHERE atoms.name = angles.k AND atoms.ffield = 1) = 6)

я пытался делать с джоинами но выходило тока дольше((

Это сообщение отредактировал(а) comcon1 - 26.10.2007, 12:30


--------------------
PM MAIL   Вверх
skyboy
Дата 26.10.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



какова цель этого запроса?
PM MAIL   Вверх
comcon1
Дата 26.10.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: нет
Всего: 17



для заданных порядковых номеров атомов, в данном случае 6 6 1 выбрать из базы углов все углы, связывающие атомы углерод-углерод-водород и водород-углерод-углерод. 

в таблице углов хранятся ссылки на неуникальные имена атомов. установить атомный номер из неуникального имени нужно по таблице atoms, также для неуникального имени нужно установить минимальный id тоже по таблице atoms.

atoms:
id  name  znuc
1   CT        6
2   CT        6
3   HC       1
4   H          1

angles:
i    j    k
CT CT  H
CT CT HC

Надо выдать эти углы, но вместо name у угла поставить минимальные id атома, соответствующий этому name. 

1 1 3
1 1 4

Но атомов в таблице очень много/



--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0411 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.