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
更正了您的查询,请尝试下面的查询
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
现场演示
谢谢您的回答,但我使用此查询无法得到准确的结果。添加样本数据和预期输出准确答案是,现在我添加了样本数据。请检查,您的预期输出是文章中的第二幅图像。