是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=自动递增

如果你不明白上面的关系:

我向字段添加值:

- 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 关键字的显式连接。

Sample SQL Fiddle

示例输出:

| 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确定具体店铺。