Не знаю как правильно объединить таблицы!

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Юлия
Сообщения: 1
Зарегистрирован: 08 июн 2008, 18:34

Не знаю как правильно объединить таблицы!

Сообщение Юлия » 08 июн 2008, 18:57

Проблема вот в чем:
у меня есть две таблицы. В первой таблице(DISK) - ID_A, DISK_1, DISK_2. Во второй(OPISANIE) - ID_B, OPISAN. В поля DISK_1 и DISK_2 я записываю ID_B. И таблички мне надо так объединить, чтобы выводилось поле OPISAN для каждого DISK_1 и DISK_2.

Interbase 6.0
Я пишу программу в Delphi и когда пытаюсь составить запрос на объединение этих таблиц, мне программа присваивает для каждого поля DISK_1 и DISK_2 соответственно ID_B1 и ID_B2. Запрос я строю таким образом - Select * from DISK d FULL JOIN OPISANIE o on d.DISK_1=o.ID_B FULL JOIN OPISANIE op on d.DISK_2=op.ID_B

это прокатывает, но выдает ошибку, что не найдено поле ID_B2. Буду признательна за помощь!

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 08 июн 2008, 21:33

Не стоит использовать звёздочку. Статические поля у датасета - тоже.
А за FULL JOIN - просто убивать.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 09 июн 2008, 11:25

Dimitry Sibiryakov писал(а):А за FULL JOIN - просто убивать.
А за 6.0 - с особым цинизмом :lol:

Gera
Сообщения: 53
Зарегистрирован: 12 мар 2008, 17:34

Сообщение Gera » 09 июн 2008, 13:10

Код: Выделить всё

SELECT 
  d.ID_A,
  d.DISK_1, -- или o1.ID_B AS ID_B1
  o1.OPISAN AS OPISAN_DISK_1,
  d.DISK_2, -- или o2.ID_B AS ID_B2
  o2.OPISAN AS OPISAN_DISK_2
FROM DISK d
LEFT JOIN OPISANIE o1 on d.DISK_1=o1.ID_B 
LEFT JOIN OPISANIE o2 on d.DISK_2=o2.ID_B
Если DISK_1 и DISK_2 NOT NULL, то лучше использовать INNER JOIN

Ответить