Mysql 将两个联接值合并到一行中

Mysql 将两个联接值合并到一行中,mysql,join,subquery,Mysql,Join,Subquery,我已经在添加问题时检查了建议,但我没有得到任何解决方案,所以我在这里提问 我用左连接进行了查询,但问题是我得到了结果,但格式和行不同 请帮我解决这个问题。我试了半天,但没有找到解决办法 SELECT products_features.qid,features_values_int.value_int,a1.value_int FROM products_features JOIN filters ON (products_features.feature_id = filters.filte

我已经在添加问题时检查了建议,但我没有得到任何解决方案,所以我在这里提问

我用左连接进行了查询,但问题是我得到了结果,但格式和行不同

请帮我解决这个问题。我试了半天,但没有找到解决办法

SELECT products_features.qid,features_values_int.value_int,a1.value_int FROM  products_features
JOIN filters ON (products_features.feature_id = filters.filter_feature_id_min OR products_features.feature_id = filters.filter_feature_id_max)
left JOIN features_values_int ON features_values_int.feature_value_id = products_features.feature_value_id AND feature_id = 'F02501'
left JOIN features_values_int as a1 ON a1.feature_value_id = products_features.feature_value_id AND feature_id = 'F02502'
WHERE  products_features.feature_id IN ('F02501','F02502')
我通过上述查询得到的结果如下:

CREATE TABLE `filters` ( `id` int(11) NOT NULL AUTO_INCREMENT, `filter_id` varchar(16) NOT NULL, `filter_group_id` varchar(6) NOT NULL, `filter_sequence` int(11) NOT NULL, `filter_name_en` varchar(64) NOT NULL, `filter_name_fi` varchar(64) NOT NULL, `filter_type_id` varchar(6) NOT NULL, `filter_feature_id` varchar(16) NOT NULL, `filter_feature_id_min` varchar(16) NOT NULL, `filter_feature_id_max` varchar(16) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `filter_id` (`filter_id`), KEY `filter_group_id` (`filter_group_id`), KEY `filter_type_id` (`filter_type_id`)) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=latin1

 CREATE TABLE `products_features` ( `id` int(11) NOT NULL AUTO_INCREMENT, `qid` varchar(32) NOT NULL, `feature_id` varchar(32) NOT NULL, `value_table` varchar(64) NOT NULL, `feature_value_id` varchar(10) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `feature_value_id` (`feature_value_id`), KEY `products_features` (`feature_id`)) ENGINE=InnoDB AUTO_INCREMENT=143862 DEFAULT CHARSET=latin1

CREATE TABLE `features_values_int` ( `id` int(11) NOT NULL AUTO_INCREMENT, `feature_value_id` varchar(10) NOT NULL, `value_int` int(32) NOT NULL, PRIMARY KEY (`id`), KEY `features_values_int` (`feature_value_id`)) ENGINE=InnoDB AUTO_INCREMENT=27327 DEFAULT CHARSET=latin1

我希望结果如下:

CREATE TABLE `filters` ( `id` int(11) NOT NULL AUTO_INCREMENT, `filter_id` varchar(16) NOT NULL, `filter_group_id` varchar(6) NOT NULL, `filter_sequence` int(11) NOT NULL, `filter_name_en` varchar(64) NOT NULL, `filter_name_fi` varchar(64) NOT NULL, `filter_type_id` varchar(6) NOT NULL, `filter_feature_id` varchar(16) NOT NULL, `filter_feature_id_min` varchar(16) NOT NULL, `filter_feature_id_max` varchar(16) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `filter_id` (`filter_id`), KEY `filter_group_id` (`filter_group_id`), KEY `filter_type_id` (`filter_type_id`)) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=latin1

 CREATE TABLE `products_features` ( `id` int(11) NOT NULL AUTO_INCREMENT, `qid` varchar(32) NOT NULL, `feature_id` varchar(32) NOT NULL, `value_table` varchar(64) NOT NULL, `feature_value_id` varchar(10) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `feature_value_id` (`feature_value_id`), KEY `products_features` (`feature_id`)) ENGINE=InnoDB AUTO_INCREMENT=143862 DEFAULT CHARSET=latin1

CREATE TABLE `features_values_int` ( `id` int(11) NOT NULL AUTO_INCREMENT, `feature_value_id` varchar(10) NOT NULL, `value_int` int(32) NOT NULL, PRIMARY KEY (`id`), KEY `features_values_int` (`feature_value_id`)) ENGINE=InnoDB AUTO_INCREMENT=27327 DEFAULT CHARSET=latin1

Create语句如下所示:

CREATE TABLE `filters` ( `id` int(11) NOT NULL AUTO_INCREMENT, `filter_id` varchar(16) NOT NULL, `filter_group_id` varchar(6) NOT NULL, `filter_sequence` int(11) NOT NULL, `filter_name_en` varchar(64) NOT NULL, `filter_name_fi` varchar(64) NOT NULL, `filter_type_id` varchar(6) NOT NULL, `filter_feature_id` varchar(16) NOT NULL, `filter_feature_id_min` varchar(16) NOT NULL, `filter_feature_id_max` varchar(16) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `filter_id` (`filter_id`), KEY `filter_group_id` (`filter_group_id`), KEY `filter_type_id` (`filter_type_id`)) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=latin1

 CREATE TABLE `products_features` ( `id` int(11) NOT NULL AUTO_INCREMENT, `qid` varchar(32) NOT NULL, `feature_id` varchar(32) NOT NULL, `value_table` varchar(64) NOT NULL, `feature_value_id` varchar(10) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `feature_value_id` (`feature_value_id`), KEY `products_features` (`feature_id`)) ENGINE=InnoDB AUTO_INCREMENT=143862 DEFAULT CHARSET=latin1

CREATE TABLE `features_values_int` ( `id` int(11) NOT NULL AUTO_INCREMENT, `feature_value_id` varchar(10) NOT NULL, `value_int` int(32) NOT NULL, PRIMARY KEY (`id`), KEY `features_values_int` (`feature_value_id`)) ENGINE=InnoDB AUTO_INCREMENT=27327 DEFAULT CHARSET=latin1
样本数据如下:

CREATE TABLE `filters` ( `id` int(11) NOT NULL AUTO_INCREMENT, `filter_id` varchar(16) NOT NULL, `filter_group_id` varchar(6) NOT NULL, `filter_sequence` int(11) NOT NULL, `filter_name_en` varchar(64) NOT NULL, `filter_name_fi` varchar(64) NOT NULL, `filter_type_id` varchar(6) NOT NULL, `filter_feature_id` varchar(16) NOT NULL, `filter_feature_id_min` varchar(16) NOT NULL, `filter_feature_id_max` varchar(16) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `filter_id` (`filter_id`), KEY `filter_group_id` (`filter_group_id`), KEY `filter_type_id` (`filter_type_id`)) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=latin1

 CREATE TABLE `products_features` ( `id` int(11) NOT NULL AUTO_INCREMENT, `qid` varchar(32) NOT NULL, `feature_id` varchar(32) NOT NULL, `value_table` varchar(64) NOT NULL, `feature_value_id` varchar(10) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `feature_value_id` (`feature_value_id`), KEY `products_features` (`feature_id`)) ENGINE=InnoDB AUTO_INCREMENT=143862 DEFAULT CHARSET=latin1

CREATE TABLE `features_values_int` ( `id` int(11) NOT NULL AUTO_INCREMENT, `feature_value_id` varchar(10) NOT NULL, `value_int` int(32) NOT NULL, PRIMARY KEY (`id`), KEY `features_values_int` (`feature_value_id`)) ENGINE=InnoDB AUTO_INCREMENT=27327 DEFAULT CHARSET=latin1
  • 过滤器表:
  • 2.1产品特性表:

  • 功能\u值\u int表:

  • 更正了您的查询,请尝试下面的查询

    SELECT T1.qid,
           T1.value_int,
           T2.value_int
    FROM
    (
    SELECT products_features.qid,
           features_values_int.value_int
    FROM  products_features
    JOIN filters 
    ON (   products_features.feature_id = filters.filter_feature_id_min 
        OR products_features.feature_id = filters.filter_feature_id_max)
    left JOIN features_values_int 
    ON features_values_int.feature_value_id = products_features.feature_value_id 
    AND feature_id = 'F02501'
    WHERE value_int IS NOT NULL
    ) AS T1
    INNER JOIN 
    (
    SELECT products_features.qid,
           a1.value_int 
    FROM  products_features
    JOIN filters 
    ON (   products_features.feature_id = filters.filter_feature_id_min 
        OR products_features.feature_id = filters.filter_feature_id_max)
    left JOIN features_values_int as a1 
    ON a1.feature_value_id = products_features.feature_value_id AND feature_id = 'F02502'
    WHERE value_int IS NOT NULL
    ) AS T2
    ON T1.qid=T2.qid
    
    输出

    qid             value_int   value_int
    TUR813G12KAD4X  10          60
    BAL110924      -35          100
    BAL149236      -45          85
    
    现场演示


    谢谢您的回答,但我使用此查询无法得到准确的结果。添加样本数据和预期输出准确答案是,现在我添加了样本数据。请检查,您的预期输出是文章中的第二幅图像。