mysql - 带子查询的连接表中的用例

标签 mysql join subquery case

我检查了与我的问题相关的所有问题,但我问它是因为它与该问题不同,我尝试过但出现错误。 请帮助我找到解决方案。我已经使用联接和子查询,但我不知道为什么在此查询中出现错误。请检查查询,我还添加了 2 个表的创建查询。查询如下:

SELECT * FROM products_features 
CASE WHEN (value_table = 'features_values_float') 
THEN 
    (JOIN features_values_float ON features_values_float.feature_value_id = products_features.feature_value_id) 
WHEN (value_table = 'features_values_int') 
THEN 
    (JOIN features_values_int ON features_values_int.feature_value_id = products_features.feature_value_id)
 END

products_features 和 features_values_float 表创建语句:

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=143854 DEFAULT CHARSET=latin1

CREATE TABLE `features_values_float` ( `id` int(11) NOT NULL AUTO_INCREMENT, `feature_value_id` varchar(10) NOT NULL, `value_float` double NOT NULL, PRIMARY KEY (`id`), KEY `features_values_float` (`feature_value_id`)) ENGINE=InnoDB UTO_INCREMENT=40260 DEFAULT CHARSET=latin1

The image of errors I m getting by this query

提前谢谢您。

最佳答案

您可以只使用LEFT JOIN ,普通连接只会连接右表中存在匹配行的位置。左连接仍会显示该行,但它只是空白。

SELECT
   *
FROM products_features
  LEFT JOIN features_values_float USING (feature_value_id)

因此,您将始终看到两个表中的值,除非右表中没有信息,则其值将为空。

还有关于连接的注意事项,如果两列值相同,则可以使用 JOIN TABLE_NAME USING (COLUMN_NAME) 这使其更具可读性。

关于mysql - 带子查询的连接表中的用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49687443/

相关文章:

php - MySQL INNER JOIN 3 个表,还可以使用 INNER JOIN 进行删除

php - 如何使用 PDO/php 从具有相同 ID 的第二个表中提取数据?

php - 如何使用单个查询从两个表中选择数据

MySQL:有限行选择的 SUM 连接表

sql - Postgresql 查询 - 按子查询结果排序

php - 在与另一个表进行检查后,如何将单词插入到表中?

mysql - 如何将多行合并为一行?

mysql - Count() 使用 Where 子句和 Left Join

php - 从mysql中的两个表中查找不常见的数据

Mysql加入计算的最大结果