вложенные запросы в access
От: axelk Латвия  
Дата: 29.09.04 07:13
Оценка:
Добрый день,

имеем следующую табличку:
ID AutoNumber
CurrentDevice Number (выбираем описание из таблички devices)
SourceDevice Number (выбираем описание из таблички devices)
SourcePort Number (выбираем описание из таблички ports)
InVPI Number
InVCI Number
DestDevice Number (выбираем описание из таблички devices)
DestPort Number (выбираем описание из таблички ports)
OutVPI Number
OutVCI Number
...

пока используем access, но в планах держим что нибудь более удобное для многопользовательского режима. Вопрос такой, для создания полной таблички использую следующий запрос:
SELECT 
   DISTINCT (ATM_PVC.ID), 
   (SELECT ATM_Device.DeviceName FROM ATM_Device WHERE ATM_Device.ID = ATM_PVC.CurrentDevice) AS CurrentDevice,
   (SELECT ATM_Device.DeviceName FROM ATM_Device WHERE ATM_Device.ID = ATM_PVC.SourceDevice) AS SourceDevice, 
   (SELECT ATM_Port.PortName FROM ATM_Port WHERE ATM_Port.ID = ATM_PVC.SourcePort) AS SourcePort,
   ATM_PVC.InVPI, 
   ATM_PVC.InVCI, 
   (SELECT ATM_Device.DeviceName FROM ATM_Device WHERE ATM_Device.ID = ATM_PVC.DestDevice) AS DestDevice,
   (SELECT ATM_Port.PortName FROM ATM_Port WHERE ATM_Port.ID = ATM_PVC.DestPort) AS DestPort,
   ATM_PVC.OutVPI, 
   ATM_PVC.OutVCI
FROM 
   ATM_Device, ATM_PVC;

Насколько такой запрос правильно составлен в плане совместимости с ANSI SQL и дальнейшей переносимости, ну например на mysql? Поля lookup accessa, подозреваю не самый идеальный способ реализации данной структуры, но для данной реализации обилие вложенных подзапросов наводит на мысли о снижении производительности при увеличении количества столбцовб как все-таки многоуважаемый ALL реализует подмену индекса на описание?

С уважением,
Александр
Re: вложенные запросы в access
От: lozzy  
Дата: 29.09.04 08:27
Оценка:
Здравствуйте, axelk, Вы писали:

A>Добрый день,


A>пока используем access, но в планах держим что нибудь более удобное для многопользовательского режима. Вопрос такой, для создания полной таблички использую следующий запрос:

A>
A>SELECT 
A>   DISTINCT (ATM_PVC.ID), 
A>   (SELECT ATM_Device.DeviceName FROM ATM_Device WHERE ATM_Device.ID = ATM_PVC.CurrentDevice) AS CurrentDevice,
A>   (SELECT ATM_Device.DeviceName FROM ATM_Device WHERE ATM_Device.ID = ATM_PVC.SourceDevice) AS SourceDevice, 
A>   (SELECT ATM_Port.PortName FROM ATM_Port WHERE ATM_Port.ID = ATM_PVC.SourcePort) AS SourcePort,
A>   ATM_PVC.InVPI, 
A>   ATM_PVC.InVCI, 
A>   (SELECT ATM_Device.DeviceName FROM ATM_Device WHERE ATM_Device.ID = ATM_PVC.DestDevice) AS DestDevice,
A>   (SELECT ATM_Port.PortName FROM ATM_Port WHERE ATM_Port.ID = ATM_PVC.DestPort) AS DestPort,
A>   ATM_PVC.OutVPI, 
A>   ATM_PVC.OutVCI
A>FROM 
A>   ATM_Device, ATM_PVC;
A>

A>Насколько такой запрос правильно составлен в плане совместимости с ANSI SQL и дальнейшей переносимости, ну например на mysql?

Абсолютно безграмотно. Предлагаю почитать что-нибудь про inner|outer joins. К тому же не все базы поддерживают сабселекты. Например mysql.
Re[2]: вложенные запросы в access
От: axelk Латвия  
Дата: 29.09.04 11:01
Оценка:
Здравствуйте, lozzy, Вы писали:


L>Абсолютно безграмотно. Предлагаю почитать что-нибудь про inner|outer joins. К тому же не все базы поддерживают сабселекты. Например mysql.


С использованием JOINов возникли проблемы при использовании одной и той же таблицы, где хранятся описания, вместе с 2мя индексами, то есть есть две таблицы:
Table1
id
id1
id2

Table2
id
description

Добавить одно поле проблем особых не возникает, но вот второе на тот же индекс из второй таблицы у меня не получилось
SELECT Table1.ID, Table1.id1, Table1.id2, Table2.Description, 
FROM Table1 INNER JOIN Table2 ON Table1.id1 = Table2.ID;
Re[3]: вложенные запросы в access
От: lozzy  
Дата: 29.09.04 11:07
Оценка:
Здравствуйте, axelk, Вы писали:

A>Добавить одно поле проблем особых не возникает, но вот второе на тот же индекс из второй таблицы у меня не получилось

A>
A>SELECT Table1.ID, Table1.id1, Table1.id2, Table2.Description, 
A>FROM Table1 INNER JOIN Table2 ON Table1.id1 = Table2.ID;
A>



SELECT 
  T1.ID, 
  T1.id1, 
  T1.id2, 
  T2_1.Description, 
  T2_2.Description
FROM 
  Table1 AS T1 INNER JOIN Table2 AS T2_1 ON 
  T1.id1 = T2.ID INNER JOIN Table2 AS T2_2 ON
  T1.id2 = T2.ID
Re[4]: вложенные запросы в access
От: axelk Латвия  
Дата: 29.09.04 11:40
Оценка:
L>
L>SELECT 
L>  T1.ID, 
L>  T1.id1, 
L>  T1.id2, 
L>  T2_1.Description, 
L>  T2_2.Description
L>FROM 
L>  Table1 AS T1 INNER JOIN Table2 AS T2_1 ON 
L>  T1.id1 = T2.ID INNER JOIN Table2 AS T2_2 ON
L>  T1.id2 = T2.ID
L>


Начинал с примерно такого же запроса, пробовал во всех вариациях, со скобками в различных комбинациях, как и в моем случае, данный пример выкидывает ошибку "Syntax error (missing operator) in query expression 'T1.id1 = T2.ID INNER JOIN Table2 AS T2_2 ON T1.id2 = T2.ID'". Установлен Access 2000 SP-3.
Re[5]: вложенные запросы в access
От: lozzy  
Дата: 29.09.04 11:43
Оценка:
Здравствуйте, axelk, Вы писали:

L>>
L>>SELECT 
L>>  T1.ID, 
L>>  T1.id1, 
L>>  T1.id2, 
L>>  T2_1.Description, 
L>>  T2_2.Description
L>>FROM 
L>>  Table1 AS T1 INNER JOIN Table2 AS T2_1 ON 
L>>  T1.id1 = T2_1.ID INNER JOIN Table2 AS T2_2 ON
L>>  T1.id2 = T2_2.ID
L>>


A>Начинал с примерно такого же запроса, пробовал во всех вариациях, со скобками в различных комбинациях, как и в моем случае, данный пример выкидывает ошибку "Syntax error (missing operator) in query expression 'T1.id1 = T2.ID INNER JOIN Table2 AS T2_2 ON T1.id2 = T2.ID'". Установлен Access 2000 SP-3.


опечатка, неужели не видно ?
Re[6]: вложенные запросы в access
От: axelk Латвия  
Дата: 29.09.04 11:56
Оценка:
L>опечатка, неужели не видно ?

Сложный день, заработало, спасибо

SELECT 
  T1.ID,
  T1.id1,
  T1.id2,
  T2_1.Description, 
  T2_2.Description
FROM (Table1 AS T1 
  INNER JOIN Table2 AS T2_1 ON T1.id1 = T2_1.ID) 
  INNER JOIN Table2 AS T2_2 ON T1.id2 = T2_2.ID;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.