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 |

请注意:这将为您提供具有whiteoval 形状的产品名称。 然而,如果您只寻找同时具有这两种形状的产品,您必须像这样修改您的查询:

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 |

请阅读更多关于JOINs 的信息。在这里您可以找到有关此的有用信息:

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如何加入以获取数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将数据插入MySQL后如何获取插入ID [重复]

如何从mysql数据库表中仅获取php数组的匹配项[重复]

如果重复,加入表获取第一个表上的第一个数据

如何从 .map 循环返回以从 API 获取数据 [重复]

PHP表单使用AJAX获取MySQL [重复]

如何在for循环中获取json数据以进行显示[重复]