Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Нужна помощь с запросом


Автор: php5 28.1.2009, 18:30
Есть запрос  примерно следующего вида:
Код

SELECT  dataA , 
            (select   data1 
              FROM table_B
              where id=1) as  as_data1 , 
             (select   data2 
              FROM  table_C  
              where id=1) as  as_data2 
FROM   table_A
WHERE  id=1;

Как сделать так что бы  этот запрос мог еще вернуть  и разницу между  переменными   ( as_data1 -  as_data2 ) 

Автор: Deniel_li 28.1.2009, 20:21
очевидно на вашем примере

(select   data1 FROM table_B  where id=1) - (select   data2 FROM  table_C  where id=1)

или обернуть в селект


Автор: php5 29.1.2009, 00:50
а если мне при этом нужны и значение as_data1,  as_data2  ? Это что ж получается 
Код

SELECT  dataA , 
             (select   data1 
               FROM table_B  
               where id=1) as  as_data1 ,
              (select   data2 
               FROM  table_C  
               where id=1) as  as_data2, 
              ( (select   data1 FROM table_B  where id=1) 
                 - 
                (select   data2 FROM  table_C  where id=1)
               ) as as_data3 
FROM   table_A
WHERE  id=1;

как то не рационально smile 

Автор: Deniz 29.1.2009, 08:45
Код
SELECT  dataA, table_B.data1, table_C.data2, table_B.data1 - table_C.data2 as data3
FROM   table_A
  join table_B on table_A.id = table_B.id
  join table_C on table_A.id = table_C.id
WHERE  table_A.id=1

Автор: php5 29.1.2009, 15:47
А как быть если   запрос такой 
Код

SELECT  dataA , (
              select   data1 
              FROM table_B 
              where param1=1 and  table_B.id=table_A.id
            ) as  as_data1 , 
            (select   data2
              FROM  table_C  
              where param2=2 and  table_C.id=table_A.id
             ) as  as_data2 
FROM   table_A 
WHERE  id=1;


Автор: Akella 29.1.2009, 19:12
php5, убери тэги цитаты из своего сообщения, не очень красиво и удобно

Автор: php5 29.1.2009, 21:40
А где  у меня теги цитаты  ?    smile 

Автор: Akella 29.1.2009, 22:43
Да? Это наверное так форум твоё сообщение выводит, просто оно вылазит далеко за правую часть экрана.

Автор: skyboy 30.1.2009, 01:42
[offtop]
Как раз в цитате работает автоперенос. Это у него теги code используются и автор поставил только минимум переносов строки. А принудительно в коде строки не переносятся.
[/offtop]

Автор: Deniz 30.1.2009, 06:42
Цитата(php5 @  29.1.2009,  18:47 Найти цитируемый пост)
А как быть если   запрос такой 
а поправить/попробовать самому никак?
Код

SELECT  dataA, table_B.data1, table_C.data2, table_B.data1 - table_C.data2 as data3
FROM   table_A
  left join table_B on (table_A.id = table_B.id and param1 = 1)
  left join table_C on (table_A.id = table_C.id and param2 = 2)
WHERE  table_A.id=1
телепатов мало, объяснишь подробнее - ответ будет более правильным.

Автор: php5 30.1.2009, 14:19
Спасибо Deniz за пример ,  а если в подзапросах  нужно еще  и применять функцию   SUM ,
Код

SELECT  dataA , (
              select   SUM(data1) 
              FROM table_B 
              where param1=1 and  table_B.id=table_A.id
            ) as  as_data1 , 
            (select   SUM(data2)
              FROM  table_C  
              where param2=2 and  table_C.id=table_A.id
             ) as  as_data2 
FROM   table_A 
WHERE  id=1;

то получается,  что нужно вернуться  к примеру   Deniel_li    smile 

Автор: Deniz 30.1.2009, 15:23
Цитата(php5 @  30.1.2009,  17:19 Найти цитируемый пост)
а если в подзапросах  нужно еще  и
пипец, а сразу все нельзя рассказать?
Цитата(php5 @  30.1.2009,  17:19 Найти цитируемый пост)
то получается,  что нужно вернуться  к примеру   Deniel_li 
пока не нужно.
Ты сам-то пробовал хоть что-нибудь поправить в запросе?
Не думал что так трудно вставить в запрос sum и group by
Код

SELECT  dataA, sum(table_B.data1), sum(table_C.data2), sum(table_B.data1) - sum(table_C.data2) as data3
FROM   table_A
  join table_B on (table_A.id = table_B.id and param1 = 1)
  join table_C on (table_A.id = table_C.id and param2 = 2)
WHERE  table_A.id=1
group by dataA
чего еще изволите?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)