我在数据库中非常新,在MYSQL中更具体。我使用xampp + MySQL工作台。我使用MySQL工作台制作了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=Primary密钥
*INT=Numeric类型属性
*AI=Auto增量
,以防您不理解上面的关系:
我向字段添加值:
- 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,Product 1
商店1,30,产品1
是给我两个不同价格的相同产品。我想要的是:
商店1,50,Product 1
我做错了什么?我相信这和人际关系有关,但我想不出来。
谢谢
发布于 2015-02-14 09:59:01
您需要在查询中将表连接在一起(指定它们之间的关系),查询应该如下所示:
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子句中的隐式联接更改为显式联接。
示例SQL Fiddle
样本输出:
| STORENAME | PRICE | PRODUCTNAME |
|-----------|-------|-------------|
| Store1 | 50 | Product1 |发布于 2015-02-14 10:00:24
您想要的是将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来标识特定的商店。
https://stackoverflow.com/questions/28514363
复制相似问题