我是数据库中的新手,在MYSQL中更具体。我使用xampp + MySQL Workbench。 我使用MySQL Workbench创建了3个表:
- tbStores with fields StoreID(PK-INT-AI), StoreName
- tbProducts with fields ProductID(PK-INT-AI), ProductName
- tbProductDetails with fields ProductDetailID(PK-INT-AI), Price, ProductID(FK), StoreID(FK)
* PK =主键
* INT =数字类型属性
* AI =自动增量
如果您不理解上述关系:
我在字段中添加值:
- tbStores=> StoreName=> Store 1
- tbProducts=> ProductName=> Product 1, Product 2
- tbProductDetails=> Price=> 50, 30
- tbProductDetails=> ProductID=> 1, 2
- tbProductDetails=> StoreID=> 1, 1
查询:
SELECT tbStores.StoreName, tbProductDetails.Price, tbProducts.ProductName
FROM tbStores, tbProductDetails, tbProducts
Where ProductName = 'Product 1';
问题:
查询将返回此
商店1,50,商品1
商店1,30,商品1
给我同样的产品有2种不同的价格。 我期待采取的是:
商店1,50,商品1
我做错了什么?我认为这与人际关系有关,但我无法弄明白。
感谢
答案 0 :(得分:0)
您需要在查询中将表连接在一起(指定它们的相关方式),查询应如下所示:
SELECT tbStores.StoreName, tbProductDetails.Price, tbProducts.ProductName
FROM tbProductDetails
JOIN tbStores ON tbStores.StoreID = tbProductDetails.StoreID
JOIN tbProducts ON tbProducts.ProductID = tbProductDetails.ProductID
WHERE tbProducts.ProductName = 'Product 1';
如果您想要所有产品,请删除where
子句。请注意,我冒昧地使用join
关键字将from子句中的隐式连接更改为显式连接。
示例输出:
| STORENAME | PRICE | PRODUCTNAME |
|-----------|-------|-------------|
| Store1 | 50 | Product1 |
答案 1 :(得分:0)
您想要的是JOIN
与ON
SELECT StoreName, Price, Product Name
FROM tblStores
JOIN tblProduct ON tblStores.StoreID = tblProducts.StoreID
JOIN tblProductDetails ON tblProduct.ProductID = tblProductDetails.ProductID
WHERE ProductName = 'Product 1'
您可以考虑GROUP BY
来识别特定商店。