2015-02-13 2 views
-3

У меня есть таблица с различными данными аппаратного обеспечения с столбцами «location_type» и «location_id» и две разные таблицы с местоположениями: номерами и людьми, оба имеют столбцы «id» и «name». Мне нужно получить одну строку «location_name» в результате, заполненную совпадающим номером или именем людей.MySQL JOIN столбцов разных таблиц в одном столбце

table_equipment 
+------------------+---------------+-------------+ 
| name    | location_type | location_id | 
+------------------+---------------+-------------+ 
| ASUS P9X79 LE | room   |   1 | 
| 8 x Intel Core z | room   |   2 | 
| GeForce GTX 680 | people  |   2 | 
+------------------+---------------+-------------+ 

table_rooms 
+------------------+----+ 
| name    | id | 
+------------------+----+ 
| Vault   | 1 | 
| Kitchen   | 2 | 
+------------------+----+ 

table_people 
+------------------+----+ 
| name    | id | 
+------------------+----+ 
| John    | 1 | 
| Maria   | 2 | 
+------------------+----+ 


Result: 
+------------------+---------------+-------------+---------------+ 
| name    | location_type | location_id | location_name | 
+------------------+---------------+-------------+---------------+ 
| ASUS P9X79 LE | room   |   1 |   Vault | 
| 8 x Intel Core z | room   |   2 |  Kitchen | 
| GeForce GTX 680 | people  |   2 |   Maria | 
+------------------+---------------+-------------+---------------+ 

Как я могу это сделать в MySQL? Я попытался это:

SELECT t_eq.*, t_ppl.name AS loc_name, t_rm.name AS loc_name 
FROM table_equipment AS t_eq 
LEFT JOIN table_people AS t_ppl ON (t_eq.location_id=t_ppl.id AND t_eq.location_type='people') 
LEFT JOIN table_rooms AS t_rm ON (t_eq.location_id=t_rm.id AND t_eq.location_type='room') 
WHERE t_eq.location_type=0 OR t_eq.location_type=1 ORDER BY id; 
+3

Если вы хотите помочь с этой проблемой, то изменить свой вопрос и (1) добавить выборки данных из таблиц; (2) добавить результаты, которые вы хотели бы видеть; (3) добавить любые SQL-запросы, которые вы пытались решить вашу проблему. –

+0

Спасибо, я добавил некоторую информацию. –

ответ

0

Найдено решение:

SELECT t_eq.*, CASE t_eq.location_type 
         WHEN 0 THEN t_ppl.name 
         WHEN 1 THEN t_rm.name END 
       AS location_name 
FROM table_equipment AS t_eq 
LEFT OUTER JOIN table_people AS t_ppl ON t_eq.location_id = t_ppl.id 
LEFT OUTER JOIN table_rooms AS t_rm ON t_eq.location_id = t_rm.id; 
0
SELECT 
location, 
location_type, 
location_id, 
location_name = CASE location_type WHEN 'room' THEN R.name WHEN 'people' THEN P.name END 
FROM Equipment E 
LEFT OUTER JOIN Rooms R 
ON E.location_id = R.id 
LEFT OUTER JOIN People P 
ON E.location_id = P.id 
+0

MySQL говорит: «Неизвестный столбец« location_name » –

+0

Хорошо, он наконец-то сработал! Благодаря! –

Смежные вопросы