表格结构:
Auto(model int (key),year int (key),country varchar)
Store(name varchar(key),country varchar,model int (key),price int)
更新仅销售商店所在国家/地区的模型的商店,这样:如果商店中模型的价格相对于同一国家/地区的所有商店中的所有商品的价格最高,然后将价格改变为同一国家所有商店中同一型号的所有价格的平均值。 (Auto.country是它制造的地方)。
多数民众赞成在哪里。不确定它是否正确。
UPDATE ...
SET ...
FROM ...
WHERE model in
(
SELECT DISTINCT model
FROM Auto,Store
WHERE Auto.model=Store.model
AND Auto.country!=Store.country
)
无法弄清楚这一点。 谢谢你的帮助。
答案 0 :(得分:1)
分解。
销售国内汽车的商店
SELECT store_id FROM Store s JOIN Auto a USING (model)
WHERE a.country = s.country
出售仅外国汽车的商店
SELECT store_id from Store where store_id NOT IN (
SELECT store_id FROM Store s JOIN Auto a USING (model)
WHERE a.country = s.country
)
更新
UPDATE Stores
SET ...
WHERE store_id IN (
SELECT store_id from Store where store_id NOT IN (
SELECT store_id FROM Store s JOIN Auto a USING (model)
WHERE a.country = s.country
)
)
此外,您的表架构不是正常的正常形式。 Store.name和Store.country重复。你应该考虑......
Store (id, name, country)
Auto (id, model, year, country)
Store_Auto (store_id, auto_id, price)
答案 1 :(得分:0)
您想要更新Store
行,所以......
UPDATE Store s
您想在(仅)price
列中设置值,因此......
SET price =
...而且您希望价格是商店所在国家/地区的汽车型号的平均值,所以......
( SELECT AVG(price)
FROM Store s2
WHERE s2.model = s.model AND s2.country = s.country )
您希望仅针对其所在国家/地区的最高价格的行执行此操作,因此...
WHERE s.price = (
SELECT MAX(price)
FROM Store s3
WHERE s3.country = s.country AND s3.model = s.model
)
......仅适用于不销售任何国产车型的商店,所以......
AND s.name NOT IN (
SELECT name
FROM
Store s4
JOIN Auto
ON s4.model = Auto.model
WHERE
s4.country = Auto.country
)