mysql - 是MYSQL的表关系错误吗?

标签 mysql database table-relationships

我对数据库非常陌生,对 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 关键字的显式连接。

Sample SQL Fiddle

示例输出:

| STORENAME | PRICE | PRODUCTNAME |
|-----------|-------|-------------|
|    Store1 |    50 |    Product1 |

关于mysql - 是MYSQL的表关系错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28514363/

相关文章:

MySQL 加载数据 Infile Null 和表达式

mysql - 按日期时间排序但其他字段不连续

php - 如何编写带有更新的准备好的语句?

Laravel 关系 - 在 View 中访问相关值

需要 MySQL 数据库结构建议。从一个表到另外两个表的两个多对多,它们处于一对多关系

MySql - 连接并统计记录中的数据

c - 如何在c中检查二进制文件中变量的数据类型

php - Mysql定义一个列名,由子内部查询从其他表中选择

mysql - 数据库设计——存储多少数据,性能与质量

database - 不允许在 MS Access 中创建或更改记录