mysql如何加入以获取数据[重复]
Posted
技术标签:
【中文标题】mysql如何加入以获取数据[重复]【英文标题】:mysql how to join to fetch data [duplicate] 【发布时间】:2012-12-14 14:13:19 【问题描述】:可能重复:How can an SQL query return data from multiple tables
我有 3 张桌子
属性
attr_id | attr_name
1 | oval<
2 | white
产品
product_id|product_name
1 | amazonite
2 | agate
attr_detail
attr_detail_id | attr_id | product_id
1 | 1 | 1
2 | 2 | 1
3 | 1 | 2
4 | 2 | 2
现在我想要椭圆形和白色的产品。如何使用联接。
【问题讨论】:
在网上搜索mysql JOIN
。
【参考方案1】:
试试这个:
SELECT DISTINCT
p.product_id,
p.product_name
FROM Product p
INNER JOIN attr_detail ad ON p.product_id = ad.product_Id
INNER JOIN Attribute a ON a.attr_id = ad.attr_id
WHERE a.attr_id IN(1, 2);
SQL Fiddle Demo
这会给你:
| PRODUCT_ID | PRODUCT_NAME |
---------------------------------------
| 1 | amazonite |
| 2 | agate |
| 3 | Product has only white |
请注意:这将为您提供具有white
或oval
形状的产品名称。 然而,如果您只寻找同时具有这两种形状的产品,您必须像这样修改您的查询:
SELECT DISTINCT
p.product_id,
p.product_name
FROM Product p
INNER JOIN
(
SELECT product_id
FROM attr_detail
WHERE attr_id IN(1, 2)
GROUP BY product_id
HAVING COUNT(DISTINCT attr_id) = 2
) ad ON p.product_id = ad.product_Id;
Updated SQL Fiddle Demo
这会给你:
| PRODUCT_ID | PRODUCT_NAME |
-----------------------------
| 1 | amazonite |
| 2 | agate |
请阅读更多关于JOIN
s 的信息。在这里您可以找到有关此的有用信息:
Join (SQL)From Wikipedia.
Visual Representation of SQL Joins.
Another Visual Explanation of SQL Joins.
SQL Queries for Mere Mortals(R): A Hands-On Guide to Data Manipulation in SQL,SQL 基础知识的好书。
对于我在第二个查询中所做的:
SELECT product_id
FROM attr_detail
WHERE attr_id IN(1, 2)
GROUP BY product_id
HAVING COUNT(DISTINCT attr_id) = 2
这叫Relational Division。
【讨论】:
在您的情况下,它提供所有三种产品,但我想要椭圆形和白色的产品。 非常感谢@mahmoud。你向我解释得很好,现在我明白我错过了什么。 @abhi - 随时欢迎您。有关更多解释,请参阅我的编辑:)。 我第一次得到如此详细的问题答案。再次感谢@mahmoud 向我解释加入。 当然,我正在阅读所有内容..以上是关于mysql如何加入以获取数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章