是MYSQL的Table关系错了吗?
MYySQL is the Table Relationship wrong?
我在数据库方面很新,在 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=自动递增
如果你不明白上面的关系:
- 1 到很多从 tbStores(StoreID) 到 tbProductDetails (StoreID)
- 1 到许多从 tbProducts(ProductID) 到 tbProductDetails (ProductID)
我向字段添加值:
- 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';
问题:
查询将return this
商店 1、50、产品 1
商店 1、30,产品 1
给我相同的产品但有 2 个不同的价格。
我期待的是这个:
商店 1、50、产品 1
我做错了什么?我相信这与人际关系有关,但我无法弄清楚。
谢谢
您需要在查询中将表连接在一起(指定它们的关联方式),查询应如下所示:
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
子句。请注意,我冒昧地将 from 子句中的隐式连接更改为使用 join
关键字的显式连接。
示例输出:
| STORENAME | PRICE | PRODUCTNAME |
|-----------|-------|-------------|
| Store1 | 50 | Product1 |
你想要的是使用 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
确定具体店铺。
我在数据库方面很新,在 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=自动递增
如果你不明白上面的关系:
- 1 到很多从 tbStores(StoreID) 到 tbProductDetails (StoreID)
- 1 到许多从 tbProducts(ProductID) 到 tbProductDetails (ProductID)
我向字段添加值:
- 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';
问题:
查询将return this
商店 1、50、产品 1
商店 1、30,产品 1
给我相同的产品但有 2 个不同的价格。 我期待的是这个:
商店 1、50、产品 1
我做错了什么?我相信这与人际关系有关,但我无法弄清楚。
谢谢
您需要在查询中将表连接在一起(指定它们的关联方式),查询应如下所示:
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
子句。请注意,我冒昧地将 from 子句中的隐式连接更改为使用 join
关键字的显式连接。
示例输出:
| STORENAME | PRICE | PRODUCTNAME |
|-----------|-------|-------------|
| Store1 | 50 | Product1 |
你想要的是使用 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
确定具体店铺。