3 таблицы, 2 базы данных, 1 сервер... как присоединиться? (SQL / Informix)



Мне нужно сформулировать один запрос, чтобы сделать следующее:
1) объединить две таблицы SQL (informix) на одном сервере(уже сделано / работает)
2) присоединить третью таблицу SQL на том же сервере, но в другой базе данных.



Для моего примера кода, давайте использовать tableA и tableB на databaseA, и tableC на databaseB.



Соединение двух таблиц в одной базе данных не является проблемой.



SELECT tableA.columnA
tableB.columnA
FROM
tableA
JOIN
tableB
ON
tableB.columnSHARED = tableA.columnSHARED
WHERE
([where clauses are inconsequential for this])


Теперь то, что я, кажется, не могу заставить работать, - это второе предложение JOIN для tableC на databaseB. У меня есть попробовал префиксить все ссылки на таблицы / столбцы префиксами имен баз данных, но это, похоже, не работает.



Просто уточним, что обе базы данных находятся на одном сервере, и пользователь, выполняющий эти команды, имеет доступ к обеим базам данных. Я бы предоставил сообщение об ошибке, но на самом деле нет ничего полезного, возвращающегося из Informix, кроме того, что есть ошибка в строке X рядом с позицией символа Y (третье предложение join). Существует также общая связь:

databaseB.tableC.columnSHARED


Как бы/может Я присоединяюсь databaseB.tableC к databaseA.tableA и databaseA.tableB?





Правка 2: Новый очищенный запрос для ответчика:



SELECT FIRST 100 
tableA.sharedColumn,
tableA.colA,
tableA.colB,
tableA.colC,
tableA.colD,
tableA.colE,
tableA.colF,
tableA.colG,
tableB.colA ,
databaseB:tableC.column
FROM
tableA
JOIN
tableB
ON
tableB.sharedColumn = tableA.sharedColumn
LEFT OUTER JOIN
databaseB:tableC
ON
databaseB:tableC.sharedColumn = databaseA:tableA.sharedColumn
WHERE
{where clauses}
627   1  

1 ответ:

Предполагая, что текущая база данных является той, которая содержит две таблицы, то вы могли бы написать:

SELECT A.ColumnA,
       B.ColumnB,
       C.ColumnC
  FROM tableA AS A
  JOIN tableB AS B ON B.columnSHARED = A.columnSHARED
  JOIN databaseB:tableC AS C ON C.columnSHARED = A.ColumnSHARED
 WHERE ([…where clauses are inconsequential for this…])

Полное обозначение имени таблицы:

[database[@server]:][owner.]tablename

Следовательно, вы также можете написать:

SELECT A.ColumnA,
       B.ColumnB,
       C.ColumnC
  FROM databaseA:tableA AS A
  JOIN databaseB:tableB AS B ON B.columnSHARED = A.columnSHARED
  JOIN databaseB:tableC AS C ON C.columnSHARED = A.ColumnSHARED
 WHERE ([…where clauses are inconsequential for this…])

Это будет корректно работать на текущем сервере, независимо от того, какая база данных является текущей базой данных.

Этот ответ предполагает, что базы данных имеют одинаковый режим ведения журнала. Если они этого не сделают, вы не сможете выполнить соединение между базами данных.

Comments

    Ничего не найдено.