2010-05-28 4 views
1

У меня проблема с обновлением таблицы. следуйте схеме таблицы:Обновление по общему полю

 
Table1 
    tableid 
    ... 
    ... 
    productID_1 
    productID_2 
    productID_3 

Table2 
    productID 
    Total 

Я должен суммировать каждый продукт в таблице2.

Например:

SELECT COUNT(*) as tot, ProductID_1 FROM Table1 GROUP Table1 

затем в UPDATE table2 SET total = .. ??? (как я могу это сделать) WHERE productID_1 = ....

Надеюсь, вы можете мне помочь.

Спасибо

+1

типа Что базы данных? SQL Server, Oracle, MySQL? –

ответ

3

Ваши варианты с точки зрения упрощения запроса в значительной степени зависят от продукта и версии, которую вы используете. Тем не менее, это решение, которое должно работать в большинстве баз данных будет:

Update Table2 
Set Total = (
      Select Count(*) 
      From (
        Select productId_1 As ProductId From Table1 
        Union All Select productId_2 From Table1 
        Union All Select productId_3 From Table1 
        ) As Z 
      Where Table2.ProductId = Z.ProductId 
      Group By ProductId 
      ) 

Главная причина этого запроса является громоздким, что данные в Table1 не нормированы. Вместо этого вам следует рассмотреть структуру Table1 как:

Create Table Table1 (
        TableId <datatype> not null 
        , ProductId <datatype> not null 
        , Constraint PK_Table1 Primary Key (TableId, ProductId) 
        ) 
+0

Я использую MYSQL. О sql спасибо, это я искал. О нормализации: я знаю, но это база данных, у которой есть наследование от клиента. – stighy

1

Вы можете сохранить первые результаты в переменной температуры таблицы/таблицы (если БД вы используете, поддерживает его). Например, в SQL Server, вы можете сделать:

declare @t table 
(
    key int, 
    cnt int 
) 

insert into @t (key, cnt) 
select count(*) as tot, ProductID_1 from Table1 ... 

Если ProductID_2 и ProductID_3 находятся в той же таблице, вы можете объединение результатов.

Затем вставьте в таблицу 2:

insert into table2 (productID, Count) 
select key, cnt from @t 
1
REPLACE INTO table2 
SELECT COUNT(*) as total, ProductID 
FROM Table1 
GROUP Table1.ProductID 
Смежные вопросы