Как объединить две таблицы с условием в их столбцах?

#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, чтобы избежать проблем с неточными представлениями чисел.