连接表中的用例与子查询

时间:2018-04-06 07:18:58

标签: 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

提前谢谢。

1 个答案:

答案 0 :(得分:0)

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

SELECT
   *
FROM products_features
  LEFT JOIN features_values_float USING (feature_value_id)

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

关于加入的说明,如果两列值相同,那么您可以使用JOIN TABLE_NAME USING (COLUMN_NAME),这使其更具可读性。