MYSQL是表关系错了吗?

时间:2015-02-14 09:50:45

标签: mysql database table-relationships

我是数据库中的新手,在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';

问题:
查询将返回此

商店1,50,商品1
商店1,30,商品1

给我同样的产品有2种不同的价格。 我期待采取的是:

商店1,50,商品1

我做错了什么?我认为这与人际关系有关,但我无法弄明白。
感谢

2 个答案:

答案 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子句中的隐式连接更改为显式连接。

Sample SQL Fiddle

示例输出:

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

答案 1 :(得分:0)

您想要的是JOINON

结合使用
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来识别特定商店。