#mysql #sql
#mysql #sql
Вопрос:
У меня есть две таблицы:
Таблица A :
id | key | price
Таблица B:
id | key | min | max
Я хочу, чтобы строки из таблицы B, в которых столбцы min и max содержат столбец цены из таблицы A. Другими словами, цена больше min и меньше max.
Я использовал этот код, но не вернул истинный результат :
SELECT * FROM B INNER JOIN A ON A.key=B.key where A.price > B.min AND A.price < B.max;
Комментарии:
1. Не могли бы вы привести пример, который на самом деле пошел не так?
2. Не могли бы вы показать образец данных?
Ответ №1:
Используйте этот запрос mysql для получения результатов и убедитесь, что для столбца цены задано значение INT или FLOAT .
SELECT
table1.id,table1.key,table1.price,
table2.min,table2.max
FROM
table1
INNER JOIN
table2 ON table1.key = table2.key
AND (table1.price > table2.min
AND table1.price < table2.max);
Комментарии:
1. в чем разница между вашим запросом и моим? Они равны?
2. Оба используют почти одинаковое время выполнения, например, 0,0006 секунды.
Ответ №2:
попробуйте
ВЫБЕРИТЕ * ИЗ B СЛЕВА ПРИСОЕДИНИТЕ A К B.ключ = A.ключ, где A.цена> B.min И A.цена < B.max;
Левое соединение вернет значения в левой таблице. Здесь это B
это показано здесь https://www.w3schools.com/sql/sql_ref_join.asp
Ответ №3:
Хорошо, я нашел проблему.
тип столбца цены был Varchar . Я изменил его на float, и теперь запрос возвращает истинный результат.
Комментарии:
1. Вероятно, вам следует использовать ДЕСЯТИЧНЫЙ / ЧИСЛОВОЙ тип данных, а не float, чтобы избежать проблем с неточными представлениями чисел.