Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2011, 17:21   #1
Dush
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 116
По умолчанию запрос SQL

доброго времени суток! помогите пожалуйста составить запрос
вопрос в следующем: есть 3 таблицы
Код:
table A          table B                   table C
code   aname      code   bname            code   cname
1        cat        1     aaa               1     xxx
2        dog        1     bbb               1     yyy
3        bird       2     ccc               1     zzz
                    2     ddd               2     www
необходимо составить запрос чтоб получить следующий результат
Код:
code       aname        bname       cname
1          cat          aaa           xxx
1          cat          bbb           yyy
1          cat          null          zzz
2          dog          ccc           www
2          dog          ddd           null
3          bird         null          null
я понимаю что не сложный должен быть, но просто мозг уже устал
вот первая часть
Код:
select a.code,a.aname, c.cname from a
left join c on a.code=c.code
каким образом сюда вставить В?
заранее благодарю
PS СУБД значения не имеет
PS2 ветки чисто про БД нет посему пишу сюда
Dush вне форума Ответить с цитированием
Старый 04.11.2011, 17:37   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А так как вы хочете не получится. Каким образом запись B.BName='aaa' зацепится только за запись C.CName='xxx'? Запрос вернет 9 записей, а не 6:
Код:
select a.code,a.aname, c.cname,b.BName
  from a
    left join c on a.code=c.code
    left join b on a.code=b.code
В таблицах B и C нужно еще по полю добавить, которое связывает записи этих таблиц, тогда можно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.11.2011, 17:49   #3
Dush
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 116
По умолчанию

вот и я к этому же выводу пришел, но думал может не вижу чего-то...
но все равно спасибо
Dush вне форума Ответить с цитированием
Старый 04.11.2011, 21:27   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно чуть изменить структуру
Код:
table A           table B                   table C
code   aname      code   bname kod        code   cname kod
1        cat        1     aaa   1           1     xxx   1
2        dog        1     bbb   2           1     yyy   2
3        bird       2     ccc   1           1     zzz   3
                    2     ddd   2           2     www   1
Тогда запрос на MSSQL (как вы не правы, что СУБД не важно) вернет то, что нужно
Код:
SELECT A.*,X.Bname,X.CName
  FROM A
  LEFT JOIN (
    SELECT COALESCE(B.code,C.code) AS code,B.Bname,C.CName
      FROM B FULL JOIN C ON C.Code=B.Code AND C.Kod=B.Kod) X ON X.code=A.code
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
SQL запрос Dux БД в Delphi 5 27.08.2008 13:36
SQL-запрос Elena БД в Delphi 3 21.05.2007 11:34
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15