Как пересечь несколько таблиц в MySQL

Я настроил страницу php, так что есть несколько вариантов ввода данных, которые помещаются в несколько временных таблиц, каждая из которых разделена запросом базы данных на основе одного условия, заданного при вводе данных. Поэтому, если входные данные имеют возраст> 10 и размер обуви> 6, а рост> 60, будут три временные таблицы table0, table1 и table2, где table0 - только возраст данных> 10, а table1 - только размер данных> 6, а таблица 2 - только высота данных> 60.

Мне интересно, как их пересечь, чтобы я получал только те результаты, которые соответствуют всем требованиям для возраста> 10 и размера обуви> 6 и роста> 60. Моя попытка использовать предложение "ГДЕ СУЩЕСТВУЕТ" приведена ниже, но она не работает.

SELECT *
FROM table0 t0
WHERE EXISTS
    (SELECT *
     FROM table1 t1
     WHERE EXISTS
         (SELECT *
          FROM table2 t2
          WHERE t0.age = t1.age = t2.age
            AND t0.shoesize = t1.shoesize = t2.shoesize
            AND t0.height = t1.height = t2.height));

1 ответ

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

Тем не менее, запрос, который вам нужен, довольно близок к тому, что вы уже пытались:

SELECT *
FROM table0 t0
WHERE EXISTS (
          SELECT 1
          FROM table1 t1
          WHERE t1.age = t0.age AND t1.gender = t0.gender
            AND t1.shoesize = t0.shoesize AND t1.weight = t0.weight
            AND t1.height = t0.height AND t1.eyes = t0.eyes) AND
      EXISTS (
          SELECT 1
          FROM table2 t2
          WHERE t2.age = t0.age AND t2.gender = t0.gender
            AND t2.shoesize = t0.shoesize AND t2.weight = t0.weight
            AND t2.height = t0.height AND t2.eyes = t0.eyes)

Примечание. Запрос выше будет работать, только если ни одно из значений не равно NULL.

Другие вопросы по тегам