У меня есть несколько таблиц с разными номерами и типами столбцов и одним общим столбцом.
+--------+---------+------------+-------------+
| person | beardID | beardStyle | beardLength |
+--------+---------+------------+-------------+
+--------+-------------+----------------+
| person | moustacheID | moustacheStyle |
+--------+-------------+----------------+
Я хочу получить все результаты, которые соответствуют заданному значению общего столбца.Я могу сделать это, используя несколько операторов выбора, таких как:
SELECT * FROM beards WHERE person = "bob"
и
SELECT * FROM moustaches WHERE person = "bob"
Но для этого требуется несколько вызовов API mysql, что кажется неэффективным.Я надеялся, что смогу использовать UNION ALL, чтобы получить все результаты за один вызов API, но UNION требует, чтобы таблицы имели одинаковое число и столбцы одинакового типа.Я мог бы написать оператор SELECT, который бы вручную дополнял результаты каждой таблицы, добавляя столбцы со значениями NULL, но это быстро стало бы неуправляемым для еще нескольких таблиц с несколькими столбцами.
Я ищурезультирующий набор примерно такой:
+--------+---------+------------+-------------+-------------+----------------+
| person | beardID | beardStyle | beardLength | moustacheID | moustacheStyle |
+--------+---------+------------+-------------+-------------+----------------+
| bob | 1 | rasputin | 1 | | |
+--------+---------+------------+-------------+-------------+----------------+
| bob | 2 | samson | 12 | | |
+--------+---------+------------+-------------+-------------+----------------+
| bob | | | | 1 | fu manchu |
+--------+---------+------------+-------------+-------------+----------------+
Есть ли способ добиться этого, быстрый и ремонтопригодный?Или мне лучше выполнить отдельный запрос для каждой таблицы?
Уточнение:
Я не ищу декартово произведение.Я не хочу ряд для каждой комбинации бороды и усов, я хочу ряд для каждой бороды и ряд для каждого усика.
Так что, если есть 3 подходящих бороды и 2 соответствующих усы, я долженполучите 5 строк, а не 6.