#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
? Они будут создавать только acartesian product
в полях идентификатора. Также ваши выборочные данные, похоже, не дают желаемых результатов (unitprice = 6
)…4. @sgeddes данные sry были отредактированы, только что неверно введены, оба связаны с использованием ProductID
5. Пожалуйста, дополнительно объясните
pvalue
bvalue
value
, что вы используете в своем обновлении — предполагаете, что используетеbvalue
только вы? И, как спрашивалось ранее, какую базу данных вы используете — sql server, oracle, mysql, postgres. и т. Д.?update
Синтаксис ajoin
отличается для каждой базы данных…
Ответ №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. Это просто пример, в котором вы должны использовать свое имя таблицы и правильные имена столбцов