mysql - 从主 id 中选择相关 id 和映射值

标签 mysql

有人可以透露一些信息吗?尝试将相关产品 ID 映射到产品 ID 并列出产品 ID 中的所有值。

mysql> SELECT p.product_id, p.sku, p.category_color, pcr.color_related_id_1, pcr.id_1_color
    -> FROM product p
    -> LEFT JOIN product_color_related pcr ON p.product_id = pcr.product_id
    -> WHERE p.product_id >= '100'
    -> LIMIT 10;
+------------+-------------------+----------------+--------------------+------------+
| product_id | sku               | category_color | color_related_id_1 | id_1_color |
+------------+-------------------+----------------+--------------------+------------+
|        100 | HL-010817-FMWP-BK | black          |                101 | silver     |
|        101 | HL-020817-FMWP-BK | silver         |                100 | black      |
|        102 | HL-030817-FMWP-TL | brown          |                100 | black      |
|        103 | HL-040817-FMWP-BK | black          |                104 | silver     |
|        104 | HL-050817-FMWP-BE | silver         |                103 | black      |
|        105 | HL-060817-FMWP-TL | brown          |                103 | black      |
|        106 | HL-070817-FMWP-BK | black          |                107 | brown      |
|        107 | HL-080817-FMWP-TL | brown          |                106 | black      |
|        108 | HL-090817-FMWP-BE | blue           |                106 | black      |
|        109 | HL-100817-FMWP-BK | black          |                110 | brown      |
+------------+-------------------+----------------+--------------------+------------+

所以我想要实现的是添加新的列 color_lated_sku 并将值与 Product_id 匹配。此案例 color_lated_id_1 101 应具有 HL-020817-FMWP-BK 的 color_lated_sku,color_lated_id_1 100 应具有 HL-010817-FMWP-BK,如下图所示

+------------+-------------------+----------------+--------------------+------------+-------------------+
| product_id | sku               | category_color | color_related_id_1 | id_1_color | color_related_sku |
+------------+-------------------+----------------+--------------------+------------+-------------------+
|        100 | HL-010817-FMWP-BK | black          |                101 | silver     | HL-020817-FMWP-BK |
|        101 | HL-020817-FMWP-BK | silver         |                100 | black      | HL-010817-FMWP-BK |
|        102 | HL-030817-FMWP-TL | brown          |                100 | black      | HL-010817-FMWP-BK |
|        103 | HL-040817-FMWP-BK | black          |                104 | silver     | HL-050817-FMWP-BE |
|        104 | HL-050817-FMWP-BE | silver         |                103 | black      | HL-040817-FMWP-BK |
|        105 | HL-060817-FMWP-TL | brown          |                103 | black      | HL-040817-FMWP-BK |
|        106 | HL-070817-FMWP-BK | black          |                107 | brown      | HL-080817-FMWP-TL |
|        107 | HL-080817-FMWP-TL | brown          |                106 | black      | HL-070817-FMWP-BK |
|        108 | HL-090817-FMWP-BE | blue           |                106 | black      | HL-070817-FMWP-BK |
|        109 | HL-100817-FMWP-BK | black          |                110 | brown      | HL-110817-FMWP-BN |
+------------+-------------------+----------------+--------------------+------------+-------------------+

最佳答案

解决方案归功于 Jorge

mysql> SELECT p.product_id, p.sku, p.category_color, pcr.color_related_id_1, pcr.id_1_color, p1.sku
    -> FROM neo_product p
    -> LEFT JOIN neo_product_color_related pcr ON p.product_id = pcr.product_id
    -> LEFT JOIN neo_product p1 ON pcr.color_related_id_1 = p1.product_id
    -> WHERE p.product_id >= '100'
    -> LIMIT 10;
+------------+-------------------+----------------+--------------------+------------+-------------------+
| product_id | sku               | category_color | color_related_id_1 | id_1_color | sku               |
+------------+-------------------+----------------+--------------------+------------+-------------------+
|        100 | HL-010817-FMWP-BK | black          |                101 | silver     | HL-020817-FMWP-BK |
|        101 | HL-020817-FMWP-BK | silver         |                100 | black      | HL-010817-FMWP-BK |
|        102 | HL-030817-FMWP-TL | brown          |                100 | black      | HL-010817-FMWP-BK |
|        103 | HL-040817-FMWP-BK | black          |                104 | silver     | HL-050817-FMWP-BE |
|        104 | HL-050817-FMWP-BE | silver         |                103 | black      | HL-040817-FMWP-BK |
|        105 | HL-060817-FMWP-TL | brown          |                103 | black      | HL-040817-FMWP-BK |
|        106 | HL-070817-FMWP-BK | black          |                107 | brown      | HL-080817-FMWP-TL |
|        107 | HL-080817-FMWP-TL | brown          |                106 | black      | HL-070817-FMWP-BK |
|        108 | HL-090817-FMWP-BE | blue           |                106 | black      | HL-070817-FMWP-BK |
|        109 | HL-100817-FMWP-BK | black          |                110 | brown      | HL-110817-FMWP-BN |
+------------+-------------------+----------------+--------------------+------------+-------------------+

关于mysql - 从主 id 中选择相关 id 和映射值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49246037/

相关文章:

mysql - 对于非常小的(4 个字符)值,BIGINT UNSIGNED 值超出范围

mysql - Docker 应用程序容器不会与我的 MySQL 容器通信

php - 在 PHP 中显示唯一的 MySQL 数据

mysql。存储过程错误 1328

php - MySQL order-by 原始 "where order"

php - 使用暂停逻辑 mysql TIMEDIFF() 和 PHP 耗时

sql - 高效查询获取树的所有子节点(mysql)

mysql - 如何在触发操作中使用WHEN条件

mysql - 单个 MySQL 查询求和日期和计数之间的结果

mysql - 嵌套选择上的 SQL 查询(也许?)