【发布时间】:2023-03-11 13:43:01
【问题描述】:
这里的 SQL 新手正在研究如何在 Access 2007 中优化 SQL 查询。我找到的解决方案确实有效,但我一点也不喜欢它,因为我认为这不是一种非常优雅的方法。这是我要的 RESULT 表:
Product | Manufacturer | Price
---------|---------------------|-----------------
Apples | FreshFoods inc. | n.a.
Oranges | FreshFoods inc. | $2.99
Lemons | FreshFoods inc. | $1.55
Lemonade | FreshFoods inc. | n.a.
Apples | NatureOnlineShop | $5.00
Oranges | NatureOnlineShop | n.a.
Lemons | NatureOnlineShop | $4.50
Lemonade | NatureOnlineShop | n.a.
Apples | ExpensiveFoods inc. | $16.00
Oranges | ExpensiveFoods inc. | $49.00
Lemons | ExpensiveFoods inc. | n.a.
Lemonade | ExpensiveFoods inc. | n.a.
生成自: 1. 表产品
ID | Name
---|--------
1 | Apples
2 | Oranges
3 | Lemons
4 | Lemonade
2。表制造商
ID | Name
---|--------------------
1 | FreshFoods inc.
2 | NatureOnlineShop
3 | ExpensiveFoods inc.
和 3. 表价格
ID | ID_Product | ID_Manufacturer | Price
---|------------|-----------------|----------
1 | 2 | 1 | $2.99
2 | 3 | 1 | $1.55
3 | 3 | 2 | $4.50
4 | 1 | 2 | $5.00
5 | 1 | 3 | $16.00
6 | 2 | 3 | $49.00
我所拥有的(一起破解)并且有效的是:
SELECT
PRODUCTS.Name as Product, MANUFACTURER.Name as Manufacturer, PRICES.Price as Price
FROM
PRODUCTS, MANUFACTURER, PRICES
WHERE
PRICES.ID_Product = PRODUCTS.ID AND
PRICES.ID_Manufacturer = MANUFACTURER.ID
UNION SELECT
PRODUCTS.Name as Product, MANUFACTURER.Name as Manufacturer, "n.a." as Price
FROM
PRODUCTS, MANUFACTURER
WHERE
(10000*PRODUCTS.ID + MANUFACTURER.ID)
NOT IN
(SELECT 10000*PRICES.ID_Product + PRICES.ID_Manufacturer FROM PRICES)
我特别不喜欢 10000*.. 部分,并且会感谢如何进行这些“完成的十字交叉”查找的替代解决方案。不知道这些是如何被调用的。
【问题讨论】:
标签: sql ms-access ms-access-2007