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

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

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2010, 09:16   #1
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию Запрос со связанными таблицами

Собственно вопрос такой: есть две связанных таблицы

основная
t1 {
id_t1 int,
name int
}

связанная
t2 {
id int,
id_t1 int,
p1 int
p2 int
}

вопрос: нужно выбрать все записи из t1 по какому либо условию и из t2 ОДНОВРЕМЕННО и в ОДНОМ запросе....

делаю так

Код:
select t1.*, t2.p1, t2.p2 from t1 left join t2 on t1.id_t1=t.id_t1 where (условие для табл t1) group t1.id_t1
но тогда получаю лишь перые значения из свзяанной таблицы (их может быть до 4-х в моей бд)
если убираю group by
получаю столько строк - сколько значений в t2, при этом первая часть касаемо t1 одинаковая для всех строк

хочется: получить 1 строку - и в ней например 3 значеня для связанной странице... в качестве новых полей или еще как... реально ли это?
ADSoft вне форума Ответить с цитированием
Старый 21.12.2010, 09:49   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

реально, конечно. всё можно... вопрос следующий будет, наверное - КАК ?


1) какая СУБД ? (просто подобные "фокусы" зависят от реализации SQL в конкретной СУБД).

2) а если будет 5 связанных записей? А если 40 ?
и вообще, это как бы противоречит нормам SQL (и реляционных БД) - поэтому позволю себе уточнить - а Вы точно хотите подобное извращение?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.12.2010, 10:21   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

1) MySQL
2) нет..... 4 связанные записи максисмум, и извращение нужно такое... иначе как альтернатива - мне потом програмно по результату вопроса в цикле бегать и еще запросы добавлять ... что как быне кашерно
ADSoft вне форума Ответить с цитированием
Старый 21.12.2010, 13:41   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

мне негде проверить на MySQL
поэтому,
проверьте, такую конструкцию "переваривает" ?

Код:
select t1.*, tt2.p1, tt2.p2, tt3.p1, tt3.p2 from t1 
      left join (Select id_t1, p1, p2,  t2 from t1, t2 where t1.id_t1=t2.id_t1 
                          and (условие для табл t1) limit 0,1) tt2
                     on t1.id_t1=tt2.id_t1 
      left join (Select id_t1, p1, p2,  t2 from t1, t2 where t1.id_t1=t2.id_t1 
                          and (условие для табл t1) limit 1,1) tt3
                     on t1.id_t1=tt3.id_t1 
      left join (Select id_t1, p1, p2,  t2 from t1, t2 where t1.id_t1=t2.id_t1 
                          and (условие для табл t1) limit 2,1) tt4
                     on t1.id_t1=tt4.id_t1 
   where (условие для табл t1)

Последний раз редактировалось Serge_Bliznykov; 21.12.2010 в 13:45.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.12.2010, 14:20   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

да! Спасибо ! мысль именно такая, синтаксис применительно к MySQL поправил... если кому интересно:
Код:
select t1.*, tt2.p1, tt2.p2, tt3.p1, tt3.p2 from t1 
      left join (Select id_t1, p1, p2,  t2 from t1, t2 where t1.id_t1=t2.id_t1 
                          and (условие для табл t1) limit 0,1) as tt2
                     on t1.id_t1=tt2.id_t1 
      left join (Select id_t1, p1, p2,  t2 from t1, t2 where t1.id_t1=t2.id_t1 
                          and (условие для табл t1) limit 1,1) as tt3
                     on t1.id_t1=tt3.id_t1 
      left join (Select id_t1, p1, p2,  t2 from t1, t2 where t1.id_t1=t2.id_t1 
                          and (условие для табл t1) limit 2,1) as tt4
                     on t1.id_t1=tt4.id_t1 
   where (условие для табл t1)
ADSoft вне форума Ответить с цитированием
Старый 21.12.2010, 20:42   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ух-ты? неужели сработало?...
Ну и отлично!
С чем я нас и поздравляю!

Удачи!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Умножение двух длинных целых чисел, представленных двунаправленными связанными списками Rifler Паскаль, Turbo Pascal, PascalABC.NET 0 28.05.2010 19:31
Поиск в БД со связанными таблицами ahvahsky2008 БД в Delphi 1 09.03.2010 19:14
Помогите со связанными таблицами alikon1 БД в Delphi 5 22.10.2007 07:52