我对数据库非常陌生,对 MYSQL 更具体。我使用 xampp + MySQL Workbench。 我使用 MySQL Workbench 创建了 3 个表:
- 带有字段 StoreID(PK-INT-AI)、StoreName 的 tbStores
- tbProducts 包含字段 ProductID(PK-INT-AI)、ProductName
- tbProductDetails 包含字段 ProductDetailID(PK-INT-AI)、Price、ProductID(FK)、StoreID(FK)
*PK=主键
*INT=数字类型属性
*AI=自动增量
如果您不理解上述关系:
- 1 到多个从 tbStores(StoreID) 到 tbProductDetails (StoreID)
- 1 到多个从 tbProducts(ProductID) 到 tbProductDetails (ProductID)
我向字段添加值:
- tbStores=> 商店名称=> 商店 1
- tbProducts=> 产品名称=> 产品 1、产品 2
- tbProductDetails=> 价格=> 50, 30
- tbProductDetails=> ProductID=> 1, 2
- tbProductDetails=> StoreID=> 1, 1
至查询:
选择 tbStores.StoreName、tbProductDetails.Price、tbProducts.ProductName
来自 tbStores、tbProductDetails、tbProducts
其中 ProductName = '产品 1';
问题:
查询将返回此
商店 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 |
关于mysql - 是MYSQL的表关系错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28514363/