3

I have 3 tables. 2 of them are the same (same columns, different data), and the third has some info data about other 2. Database looks like this:

Table 1:

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

Table 2:

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

Table 3:

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

I'm trying to JOIN all into one table, which should look like this:

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

Any idea how sql query should look like?

Thanks

1

2 Answers 2

4

Try union:

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: You can make another select from those results, then you can limit, group or order:

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: To have only one row from each table (table 2 and table 3) you can use limit/group by/order by for each query (assuming you have column date):

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
Sign up to request clarification or add additional context in comments.

5 Comments

Is it possible to use LIMIT in query like this (in order to get only latest entry from each table)?
Yes, all of the standard operations are possible (limit, order, group). Check my updated answer
Thanks for update, but is it possible to use LIMIT (and ORDER BY) to 'grab' only the latest row from Table 2 and Table 3 and then JOIN them with Table 1 just like you did in your first query?
Yes, you can use Order By, Group By, Limit in the queries that you are union joining afterwards. Check third query example.
Thanks, you've been very helpful! Just needed to place SELECT clauses inside parentheses. Query works great!
0

You can use the UNION statement:

(
    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
)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.