Добрый день,
имеем следующую табличку:
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 реализует подмену индекса на описание?
С уважением,
Александр
Здравствуйте, 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.
Здравствуйте, 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;
Здравствуйте, 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
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.
Здравствуйте, 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.
опечатка, неужели не видно ?
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;