MySql получить данные из нескольких таблиц результатов от выбора
У меня есть таблица "двигаться", как это
----------------------------------
| id | ... | ... | tab | idTab |
----------------------------------
| 1 | ... | ... | bike | 14 |
| 2 | ... | ... | car | 57 |
| 3 | ... | ... | car | 23 |
| 4 | ... | ... | bike | 43 |
| 5 | ... | ... | boat | 20 |
| .. | ... | ... | ... | .... |
----------------------------------
вкладка "велосипед"
---------------------------------
| id | code | name | matr | ... |
---------------------------------
| .. | ... | .... | .... | ... |
| 14 | AAA | MARIO | 111 | ... |
| .. | ... | .... | .... | ... |
| 43 | A1C | JOHN | EEE | ... |
| .. | ... | .... | .... | ... |
---------------------------------
вкладка "машина"
---------------------------------
| id | code | name | matr | ... |
---------------------------------
| .. | ... | .... | .... | ... |
| 23 | 123 | JACK | WER | ... |
| .. | ... | .... | .... | ... |
| 57 | 2A2 | FRANK | MSS | ... |
| .. | ... | .... | .... | ... |
---------------------------------
вкладка "лодка"
---------------------------------
| id | code | name | matr | ... |
---------------------------------
| .. | ... | .... | .... | ... |
| 20 | UJN | PETER | WSX | ... |
| .. | ... | .... | .... | ... |
---------------------------------
Я хотел бы иметь в одном запросе все данные "перемещения" и данные каждой таблицы, представленные в "движении" с определенным idTab.
Результат будет таким
--------------------------------------------------------------
| id | ... | ... | tab | idTab | code | name | matr | ... |
--------------------------------------------------------------
| 1 | ... | ... | bike | 14 | AAA | MARIO | 111 | ... |
| 2 | ... | ... | car | 57 | 2A2 | FRANK | MSS | ... |
| 3 | ... | ... | car | 23 | 123 | JACK | WER | ... |
| 4 | ... | ... | bike | 43 | A1C | JOHN | EEE | ... |
| 5 | ... | ... | boat | 20 | UJN | PETER | WSX | ... |
| .. | ... | ... | ... | .... | ... | .... | .... | ... |
--------------------------------------------------------------
По сути, я не знаю, есть ли у меня конкретный стол в движении. Я могу сделать запрос, как это
SELECT * FROM move WHERE id>0
а затем foreach с
SELECT * FROM move["tab"] WHERE id=move["idTab"]
но это очень тяжелая работа, потому что перемещение стола очень долго...
Я пытаюсь с этим, но (очевидно) не работает...
SELECT M.*, T.* FROM move as M, M.tab as T WHERE M.id>0 AND M.idTab=T.id
2 ответа
Ваш дизайн базы данных не идеален, и я не думаю, что у вас должны быть отдельные таблицы для каждого типа транспортного средства. При этом, если вы объедините три таблицы в одну, используя UNION
Тогда одно соединение может дать желаемый результат.
SELECT t1.*, t2.*
FROM move t1
INNER JOIN
(
SELECT id, code, name, matr, 'bike' AS tab
FROM bike
UNION ALL
SELECT id, code, name, matr, 'car'
FROM car
SELECT id, code, name, matr, 'boat'
FROM boat
) t2
ON t1.idTab = t2.id AND
t1.tab = t2.tab
Я добавил вычисляемый столбец для типа таблицы в предположении, что, возможно, то же самое id
может появиться в нескольких таблицах транспортных средств.
Select 'bike' vehicle,column1,.... from bike
Union
Select 'boat',column1,... from boat
Union...