Php mysql如何加入以获取数据
可能重复:Php mysql如何加入以获取数据,php,mysql,sql,join,Php,Mysql,Sql,Join,可能重复: 我有三张桌子 属性 attr_id | attr_name 1 | oval< 2 | white 属性详细信息 attr_detail_id | attr_id | product_id 1 | 1 | 1 2 | 2 | 1 3 | 1 | 2 4 | 2 | 2 现在我想要椭圆形和白色的产品
我有三张桌子 属性
attr_id | attr_name
1 | oval<
2 | white
属性详细信息
attr_detail_id | attr_id | product_id
1 | 1 | 1
2 | 2 | 1
3 | 1 | 2
4 | 2 | 2
现在我想要椭圆形和白色的产品。如何使用连接。尝试以下方法:
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);
这将为您提供:
| PRODUCT_ID | PRODUCT_NAME |
---------------------------------------
| 1 | amazonite |
| 2 | agate |
| 3 | Product has only white |
| PRODUCT_ID | PRODUCT_NAME |
-----------------------------
| 1 | amazonite |
| 2 | agate |
注意:这将为您提供具有
白色
或椭圆形
形状的产品名称。但是,如果只查找同时具有这两种形状的产品,则必须修改查询,如下所示:
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;
这将为您提供:
| PRODUCT_ID | PRODUCT_NAME |
---------------------------------------
| 1 | amazonite |
| 2 | agate |
| 3 | Product has only white |
| PRODUCT_ID | PRODUCT_NAME |
-----------------------------
| 1 | amazonite |
| 2 | agate |
请阅读更多关于
JOIN
s的信息。在这里,您可以找到有关以下内容的有用信息:
- ,一本关于SQL基础知识的好书
SELECT product_id
FROM attr_detail
WHERE attr_id IN(1, 2)
GROUP BY product_id
HAVING COUNT(DISTINCT attr_id) = 2
这叫做。在网上搜索
MySQL-JOIN
。在你的情况下,它会提供所有三种产品,但我想要椭圆形和白色的产品。非常感谢@mahmoud。你向我解释得很好,现在我明白我错过了什么。@abhi-欢迎你随时光临。更多解释请参见我的编辑:)。我第一次得到如此详细的问题答案。再次感谢@mahmoud为我解释加入。当然,我正在阅读所有。。