views:

136

answers:

4

If I have two tables in mysql that have similar columns...

TABLEA
  id
  name
  somefield1

TABLEB 
  id
  name
  somefield1
  somefield2

How do I structure a SELECT statement so that I can SELECT from both tables simultaneously, and have the result sets merged for the columns that are the same?

So for example, I am hoping to do something like...

SELECT name, somefield1 FROM TABLEA, TABLEB WHERE name="mooseburgers";

...and have the name, and somefield1 columns from both tables merged together in the result set.

Thank-you for your help!

Sample output appended because question unclear:

I want the rows from table1 and the rows from table2 appended in the resultset. For example if the tables contain

TABLEA
id(1) name(zoot) somefield(suit)

TABLEB
id(1) name(zoot) somefield(flute)

The resultet would look like:

name     |     somefield1
zoot           suit
zoot           flute
A: 

I am not sure what you mean by merge, but you can UNION the results:

SELECT id, name, somefield1 FROM TABLEA WHERE name="mooseburgers"
union all
SELECT id, name, somefield1 FROM TABLEB WHERE name="mooseburgers"; 
RedFilter
A: 

Do you perhaps mean

SELECT tableA.id, tableA.name, tableA.somefield1
FROM tableA, tableB
WHERE tableA.name = tableB.name AND tableA.name="mooseburgers"
aioobe
+1  A: 

You can combine columns from both tables using (id,name) as the joining criteria with:

select
    a.id                               as id,
    a.name                             as name,
    a.somefield1 || ' ' || b.somefied1 as somefield1
from tablea a, tableb b
where a.id   = b.id
  and a.name = b.name
  and b.name = 'mooseburgers';

If you want to join on just the (id) and combine the name and somefield1 columns:

select
    a.id                               as id,
    a.name || ' ' || b.name            as name,
    a.somefield1 || ' ' || b.somefied1 as somefield1
from tablea a, tableb b
where a.id   = b.id
  and b.name = 'mooseburgers';

Although I have to admit this is a rather unusual way of doing things. I assume you have your reasons however :-)

If I've misunderstood your question and you just want a more conventional union of the two tables, use something like:

select id, name, somefield1, '' as somefield2 from tablea where name = 'mooseburgers'
union all
select id, name, somefield1, somefield2 from tableb where name = 'mooseburgers'

This won't combine rows but will instead just append the rows from the two queries. Use union on its own if you want to remove duplicate rows but, if you're certain there are no duplicates or you don't want them removed, union all is often more efficient.


Based on your edit, the actual query would be:

select name, somefield1 from tablea where name = 'zoot'
union all
select name, somefield1 from tableb where name = 'zoot'

(or union if you don't want duplicates where a.name==b.name=='zoot' and a.somefield1==b.somefield1).

paxdiablo
Thank-you. Sorry if my question was unclear. Yes, I just want to append the rows from the two tables. And be sure that the column somefield1 from Table1 and somefield1 from Table2 both appear under the single column somefield 1 in the resultset.
Travis
A: 

Depending on what you mean by merge, here's a possible solution.

Select id,name,somefield1 from TableA
WHERE Name ='mooseburgers'
UNION
Select id,name,somefield1 from TableB
WHERE Name ='mooseburgers'

Will allow you to show results from both tables with the results merged into 1 table.

Kibbee