Как пересечь несколько таблиц в 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.