2013-02-13 3 views
2

У меня есть 3 стола. 2 из них (одинаковые столбцы, разные данные), а третий имеет некоторую информацию о данных другой 2. База данных выглядит следующим образом:Mysql JOIN (несколько) столов

Таблица 1:

+--------------+ 
| ID | Name | 
+--------------+ 
| 1 | Table 2 | 
| 2 | Table 3 | 
+--------------+ 

Таблица 2:

+-------------------------------+ 
| Name | Temperature | Pressure | 
+-------------------------------+ 
| Table 2 | 22 | 1013  | 
+-------------------------------+ 

Таблица 3:

+-------------------------------+ 
| Name | Temperature | Pressure | 
+-------------------------------+ 
| Table 3 | 20 | 1009  | 
+-------------------------------+ 

Я пытаюсь объединить все в одну таблицу, которая должна выглядеть следующим образом:

+-------------------------------+ 
| Name | Temperature | Pressure | 
+-------------------------------+ 
| Table 2 | 22 | 1013  | 
| Table 3 | 20 | 1009  | 
+-------------------------------+ 

Любая идея, как должен выглядеть запрос sql?

Благодаря

+0

Вы ищете UNION, посмотрите на этот пост http://stackoverflow.com/questions/14864933/mysql-join-multiple -tables – ryanbwork

ответ

3

Try союз:

SELECT table1.name, temperature, pressure 
FROM table1 inner join table2 ON 
table1.name = table2.name 
UNION 
SELECT table1.name, temperature, pressure 
FROM table1 inner join table3 ON 
table1.name = table3.name 

Edit: Вы можете сделать еще один выбор из этих результатов, то вы можете ограничить, группа или заказ:

SELECT * FROM 
(
    SELECT table1.name, temperature, pressure 
    FROM table1 inner join table2 ON 
    table1.name = table2.name 
    UNION 
    SELECT table1.name, temperature, pressure 
    FROM table1 inner join table3 ON 
    table1.name = table3.name 
) as JoinedTable 
LIMIT 0, 1 

Edit 2: Чтобы иметь только одну строку из каждой таблицы (таблица 2 и таблица 3), вы можете использовать limit/group by/order by для каждого запроса (при условии, что у вас есть дата столбца):

SELECT table1.name, temperature, pressure 
FROM table1 inner join table2 ON 
table1.name = table2.name 
ORDER BY date DESC 
LIMIT 0, 1 
UNION 
SELECT table1.name, temperature, pressure 
FROM table1 inner join table3 ON 
table1.name = table3.name 
ORDER BY date DESC 
LIMIT 0, 1 
+0

Да, это работает! Благодаря! – Domi

+0

Возможно ли использовать запрос LIMIT в таком запросе (чтобы получить только последнюю запись из каждой таблицы)? – Domi

+0

Да, возможны все стандартные операции (ограничение, порядок, группа). Проверьте мой обновленный ответ –

0

Вы можете использовать UNION заявление:

(
    SELECT Name, Temperature, Pressure 
    FROM Table1 INNER JOIN Table2 ON Table1.Name = Table2.Name 
) 
UNION 
(
    SELECT Name, Temperature, Pressure 
    FROM Table1 INNER JOIN Table3 ON Table1.Name = Table3.Name 
) 
+0

Спасибо, это работает! – Domi

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