【问题标题】:Double data MySQL JOIN双数据 MySQL JOIN
【发布时间】:2018-10-02 18:18:42
【问题描述】:

我在 MySQL 中有这样的三个表结构:

+------------------------+ | Tables_in_resort_wear | +------------------------+ |类别 | |分类sub | |项目 | +------------------------+
  1. 表格类别:
+-------------+------------------+----------------+ | ID_类别 |名称_类别 |排名_类别 | +-------------+------------------+----------------+ | 101 |巴厘岛度假服| 1 | | 102 |巴厘岛服装| 1 | | 103 |加大号度假村 | 3 | | 104 |巴厘岛批发| 4 | | 105 |巴厘连衣裙| 高分辨率照片| CLIPARTO 5 | | 106 |巴厘岛长袍 | 6 | +-------------+------------------+----------------+
  1. 表格分类
+----------------+----------+------------------ ------+------------------+ | ID_Categorysub | ID_类别 | Name_Categorysub | Rank_Categorysub | +----------------+----------+------------------ ------+------------------+ | 630 | 103 |加大码度假服1 | 1 | | 625 | 101 |巴厘岛度假服 1 | 1 | |第626章101 |巴厘岛度假服 2 | 2 | |第627章102 |巴厘岛服装 1 | 1 | | 628 | 102 |巴厘岛服装2 | 2 | |第629章103 |加大码度假服2 | 2 | |第631章104 |巴厘岛批发1 | 1 | |第632章104 |巴厘岛批发2 | 2 | |第633章105 |巴厘连衣裙 1 | 1 | |第634章105 |巴厘连衣裙 2 | 2 | |第635章106 |巴厘岛长衫 1 | 1 | |第636章106 |巴里卡夫坦 2 | 2 | +----------------+----------+------------------ ------+------------------+
  1. 表格项目
+----------+-------------+----------------+------- -------------+------------------------------------------------ ------+ | ID_项目 | ID_类别 | ID_Categorysub |代码_项目 |名称_物品 | +----------+-------------+----------------+------- -------------+------------------------------------------------ ------+ | 2519 | 101 | 625 | jm4828 长罩衫|长长的kaftan 度假穿连衣裙| 高分辨率照片| CLIPARTO | 2520 | 101 | 625 | jm4828 长罩衫| juwita 月亮长衫| 高分辨率照片| CLIPARTO | 2521 | 101 | 625 | jm4828 长款连衣裙| jm4828 长款热带度假装连衣裙| SHOPBOP | 2522 | 101 | 625 | jm4828 度假服| jm4828 juwita moon 巴厘岛热带连衣裙| SHOPBOP |第2523章101 |第626章jm4828 长罩衫| jm4828 长款卡夫坦连衣裙巴厘岛| 高分辨率照片| CLIPARTO |第2524章101 |第626章jm4828 长袍巴厘岛 | jm4828 女士长袍巴厘岛设计| SHOPBOP | 2525 | 101 |第626章jm4828 巴厘岛长衫| jm4828 juwita moon 巴厘岛长衫设计| SHOPBOP | 2526 | 101 |第626章jm4828 巴厘岛度假村we | jm4828 巴厘岛度假穿长裙| SHOPBOP | 2527 | 102 |第627章jm44dm 巴厘岛妇女| 高分辨率照片| CLIPARTO jm44dm 巴厘岛度假村穿长裙| SHOPBOP | 2528 | 102 |第627章jm44dm 巴厘岛妇女| 高分辨率照片| CLIPARTO jm44dm 度假村穿连衣裙巴厘岛| 高分辨率照片| CLIPARTO | 2529 | 102 |第627章jm44dm 巴厘连衣裙| SHOPBOP jm44dm 巴厘岛长裙设计| | 2530 | 102 |第627章jm44dm 巴厘连衣裙| SHOPBOP jm44dm 女士巴厘连衣裙| SHOPBOP | 2531 | 102 | 628 | jm44dm 巴厘连衣裙| SHOPBOP jm44dm 女式长裙巴厘岛设计| 高分辨率照片| CLIPARTO |第2532章102 | 628 | jm44dm 巴厘岛jm44dm 巴厘岛长裙设计| |第2533章102 | 628 | jm44dm 度假服| jm44dm 度假村穿长裙| 高分辨率照片| CLIPARTO |第2534章102 | 628 | jm44dm 巴厘岛长袍| 高分辨率照片| CLIPARTO jm44dm 巴厘岛长袍| 高分辨率照片| CLIPARTO | 2535 | 103 | 630 | jm18 加大码巴厘岛 | juwitamoon 女士加大码| 高分辨率照片| CLIPARTO |第2536章103 | 630 | jm18 加大码巴厘岛 | juwita moon 女士加大码巴厘岛| 高分辨率照片| CLIPARTO |第2537章103 | 630 | jm7002 巴厘岛加尺寸| 高分辨率照片| CLIPARTO女士加大码度假服巴厘岛| 高分辨率照片| CLIPARTO |第2538章103 | 630 | jm7002 加大码平衡球|巴厘岛最佳加大码长衫 | |第2539章103 |第629章jm1333 巴厘岛加尺寸| 高分辨率照片| CLIPARTO juwita moon 巴厘岛加大码衬衫裙| SHOPBOP | 2540 | 103 |第629章jm44dm 加大码 | juwita 月亮加大码长裙| SHOPBOP |第2541章103 |第629章jm18 加大码巴厘岛 |巴厘岛制造的女士加大码长衫| 高分辨率照片| CLIPARTO |第2542章103 |第629章jm7002 加大码平衡球| juwita 月亮加大码女式长衫| SHOPBOP +----------+-------------+----------------+------- -------------+------------------------------------------------ ------+

我想显示这 3 个表中的一些数据,为此我使用了 JOIN。

这是我的查询:

SELECT items.id_items, 
       items.name_items, 
       category.name_category, 
       categorysub.id_categorysub, 
       categorysub.name_categorysub 
FROM   category 
       JOIN items 
         ON category.id_category = items.id_category 
       JOIN categorysub 
         ON category.id_category = categorysub.id_category 
LIMIT  8 

但是,在 ID_Items 中显示双重数据的结果如下:

+----------+-------------------------- --+--------------------------------+----------------+------------ ---------+ | ID_项目 |名称_物品 |名称_类别 | ID_Categorysub | Name_Categorysub | +----------+-------------------------- --+--------------------------------+----------------+------------ ---------+ | 2519 |长长的kaftan 度假穿连衣裙| 高分辨率照片| CLIPARTO巴厘岛度假服| 625 |巴厘岛度假服 1 | | 2519 |长长的kaftan 度假穿连衣裙| 高分辨率照片| CLIPARTO巴厘岛度假服|第626章巴厘岛度假服 2 | | 2520 | juwita 月亮长衫| 高分辨率照片| CLIPARTO巴厘岛度假服| 625 |巴厘岛度假服 1 | | 2520 | juwita 月亮长衫| 高分辨率照片| CLIPARTO巴厘岛度假服|第626章巴厘岛度假服 2 | | 2521 | jm4828 长款热带度假装连衣裙| SHOPBOP巴厘岛度假服| 625 |巴厘岛度假服 1 | | 2521 | jm4828 长款热带度假装连衣裙| SHOPBOP巴厘岛度假服|第626章巴厘岛度假服 2 | | 2522 | jm4828 juwita moon 巴厘岛热带连衣裙| SHOPBOP巴厘岛度假服| 625 |巴厘岛度假服 1 | | 2522 | jm4828 juwita moon 巴厘岛热带连衣裙| SHOPBOP巴厘岛度假服|第626章巴厘岛度假服 2 | +----------+-------------------------- --+--------------------------------+----------------+------------ ---------+

我想显示一些类似的数据,但在 ID_Items 中没有双重数据。我已经尝试过 DISTINCT,我得到了与上面相同的数据。 在我的情况下如何最好的方法?

【问题讨论】:

  • "我想显示一些类似的数据,但在 ID_Items 中没有双重数据。"是的,这就是 JOIN 的工作方式,您可以获得具有一对多或多对多关系的重复列数据。是的,SELECT DISTINCT Items.ID_Items, Items.Name_Items, Category.Name_Category, Categorysub.ID_Categorysub, Categorysub.Name_Categorysub FROM ... 不起作用,因为您没有重复记录。
  • 除了什么 MySQL 版本和什么是预期的输出..
  • 正确格式化您的代码。当人们查看一直向右延伸的单行代码时,他们倾向于跳过它。

标签: mysql join


【解决方案1】:

首先你加入categorycategorysub,然后你可以同时加入items

SELECT items.id_items, 
       items.name_items, 
       category.name_category, 
       categorysub.id_categorysub, 
       categorysub.name_categorysub 
FROM   category 
       JOIN categorysub 
         ON category.id_category = categorysub.id_category 
       JOIN items 
         ON category.id_category = items.id_category 
        AND categorysub.ID_Categorysub = items.ID_Categorysub 
LIMIT  8 

但这是针对您拥有复合主键的情况。

对于您的数据,我假设 ID_Categorysub 是独一无二的,所以实际上您只需要:

       JOIN items 
         ON categorysub.ID_Categorysub = items.ID_Categorysub 

【讨论】:

  • 哇,你说得对,我试过用你的方法查询,我得到了我想要的数据。现在我了解我的案例的解决方案。在我无法想象这种方法之前。非常感谢。
【解决方案2】:

尝试使用分组方式

SELECT items.id_items, 
       items.name_items, 
       category.name_category, 
       categorysub.id_categorysub, 
       categorysub.name_categorysub 
FROM   category 
       JOIN items 
         ON category.id_category = items.id_category 
       JOIN categorysub 
         ON category.id_category = categorysub.id_category 
GROUP  BY id_items 

【讨论】:

  • 非常错误的建议,因为这不符合 ANSI SQL 标准。除了使用 GROUP BY 来取消重复是很奇怪的。
  • 不要在查询中使用没有聚合函数的 GROUP BY。如果要删除重复项(此处不是这种情况),请使用 DISTINCT,而不是 GROUP BY。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
相关资源
最近更新 更多