обновление таблицы A с математическим вычислением содержимого таблицы b и содержимого c

#mysql #sql

#mysql #sql

Вопрос:

У меня есть три таблицы

таблица а — таблица цен на продукцию:

 | productID | country | price |
|-----------|---------|-------|
| 1         | US      | 200   |
| 1         | UK      | 200   |
| 2         | US      | 600   |
  

таблица b — это таблица настройки производительности:

 | ProductID | Nameofsetting | value |
|-----------|---------------|-------|
| 1         | pvalue        | 300   |
| 1         | bvalue        | 200   |
| 2         | bvalue        | 600   |
  

таблица c — цена за единицу:

 | unitprice |
|-----------|
| 6.0       |
  

Мне нужно выполнить обновление цены таблицы A по идентификатору продукта с вычислением (bv таблицы * unitprice таблицы c)

пример: если UnitPrice = 8.0

таблица A обновит базу цен ниже:

 | productID | country | price |
|-----------|---------|-------|
| 1         | US      | 1200   |
| 1         | UK      | 1200   |
| 2         | US      | 3600   |
  

Комментарии:

1. Какую СУБД вы используете?

2. все это независимая таблица

3. Как tableb относится ( join ) к tablea ? Они будут создавать только a cartesian product в полях идентификатора. Также ваши выборочные данные, похоже, не дают желаемых результатов ( unitprice = 6 )…

4. @sgeddes данные sry были отредактированы, только что неверно введены, оба связаны с использованием ProductID

5. Пожалуйста, дополнительно объясните pvalue bvalue value , что вы используете в своем обновлении — предполагаете, что используете bvalue только вы? И, как спрашивалось ранее, какую базу данных вы используете — sql server, oracle, mysql, postgres. и т. Д.? update Синтаксис a join отличается для каждой базы данных…

Ответ №1:

     DECLARE @unit_price DECIMAL

    SELECT TOP 1 @unit_price = UniTPrice
    FROM #TableC;

    UPDATE #tableA
    SET Price = #tableb.Value * @unit_price
    FROM #tableA
    INNER JOIN #tableb ON #tableA.ProductID = #tableb.ProductID
    WHERE #tableb.NameofString = 'bvalue'

    SELECT * FROM #tableA
  

Комментарии:

1. ошибка snstax при ВЫБОРЕ TOP 1 @unit_price = UnitPrice ИЗ #TableC;

2. Это просто пример, в котором вы должны использовать свое имя таблицы и правильные имена столбцов