Вариант использования в соединительной таблице с подзапросом

0

Я проверяю весь вопрос, который связан с моими вопросами, но я спрашиваю его, потому что он отличается от этого вопроса, и я пытался, но получал ошибку. Пожалуйста, помогите мне найти решение для этого. Я уже использую соединения и подзапросы, но я не знаю, почему в этом запросе я получаю ошибки. Проверьте запрос, и я также добавил запрос создания из 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

Изображение 174551

Заранее спасибо.

Теги:
join
subquery
case

1 ответ

0

Вы можете просто использовать LEFT JOIN, нормальное соединение будет объединяться только там, где есть соответствующая строка в правой таблице. Левое соединение все равно покажет строку, но будет просто пустым.

SELECT
   *
FROM products_features
  LEFT JOIN features_values_float USING (feature_value_id)

Таким образом, вы всегда увидите значения из обеих таблиц, за исключением случаев, когда в правой таблице нет информации, ее значения будут равны нулю.

Также примечание о присоединении, если значения двух столбцов совпадают, вы можете использовать JOIN TABLE_NAME USING (COLUMN_NAME) что делает его более читаемым.

  • 0
    Спасибо за ваш ответ, но, пожалуйста, проверьте мой вопрос еще раз, что я хочу присоединиться к tabs features_values_float, только если value_table = features_values_float.
  • 0
    Это то, что делает LEFT JOIN : если значение существует в обоих столбцах, оно присоединится, иначе просто покажет нулевые значения.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню