Я проверяю весь вопрос, который связан с моими вопросами, но я спрашиваю его, потому что он отличается от этого вопроса, и я пытался, но получал ошибку. Пожалуйста, помогите мне найти решение для этого. Я уже использую соединения и подзапросы, но я не знаю, почему в этом запросе я получаю ошибки. Проверьте запрос, и я также добавил запрос создания из 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
Заранее спасибо.
Вы можете просто использовать LEFT JOIN, нормальное соединение будет объединяться только там, где есть соответствующая строка в правой таблице. Левое соединение все равно покажет строку, но будет просто пустым.
SELECT
*
FROM products_features
LEFT JOIN features_values_float USING (feature_value_id)
Таким образом, вы всегда увидите значения из обеих таблиц, за исключением случаев, когда в правой таблице нет информации, ее значения будут равны нулю.
Также примечание о присоединении, если значения двух столбцов совпадают, вы можете использовать JOIN TABLE_NAME USING (COLUMN_NAME)
что делает его более читаемым.
LEFT JOIN
: если значение существует в обоих столбцах, оно присоединится, иначе просто покажет нулевые значения.