Если у меня есть две таблицы в mysql, которые имеют подобные столбцы...
TABLEA
id
name
somefield1
TABLEB
id
name
somefield1
somefield2
Как я структурирую оператор SELECT так, чтобы я мог ВЫБРАТЬ из обеих таблиц одновременно, и наборы результатов объединились для столбцов, которые являются тем же?
Так, например, я надеюсь сделать что-то как...
SELECT name, somefield1 FROM TABLEA, TABLEB WHERE name="mooseburgers";
... и имейте имя и somefield1 столбцы от обеих таблиц, объединенных вместе в наборе результатов.
Слова благодарности для Вашей справки!
Демонстрационный вывод, добавленный, потому что неясный вопрос:
Я хочу строки от table1 и строки от table2, добавленного в наборе результатов. Например, если таблицы содержат
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
Вы можете объединить столбцы из обеих таблиц, используя (id, name) в качестве критерия объединения с:
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';
Если вы хотите объединить только (id) и объединить столбцы name и somefield1 :
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';
Хотя я должен признать, что это довольно необычный способ делать вещи. Однако я предполагаю, что у вас есть свои причины: -)
Если я неправильно понял ваш вопрос, и вы просто хотите более традиционное объединение двух таблиц, используйте что-то вроде:
select id, name, somefield1, '' as somefield2 from tablea where name = 'mooseburgers'
union all
select id, name, somefield1, somefield2 from tableb where name = 'mooseburgers'
Это не будет объединить ] строк, но вместо этого просто добавит строки из двух запросов. Используйте union
отдельно, если вы хотите удалить повторяющиеся строки, но, если вы уверены, что дубликатов нет или вы не хотите, чтобы они удалялись, union all
часто более эффективен. .
На основании вашего редактирования фактический запрос будет:
select name, somefield1 from tablea where name = 'zoot'
union all
select name, somefield1 from tableb where name = 'zoot'
(или union
, если вам не нужны дубликаты, где a.name == b.name == 'zoot'
и a.somefield1 == b.somefield1
).
Я не уверен, что вы имеете в виду под слиянием, но вы можете UNION
результаты:
SELECT id, name, somefield1 FROM TABLEA WHERE name="mooseburgers"
union all
SELECT id, name, somefield1 FROM TABLEB WHERE name="mooseburgers";
Возможно, вы имеете в виду
SELECT tableA.id, tableA.name, tableA.somefield1
FROM tableA, tableB
WHERE tableA.name = tableB.name AND tableA.name="mooseburgers"
В зависимости от того, что вы подразумеваете под объединением, вот возможное решение.
Select id,name,somefield1 from TableA
WHERE Name ='mooseburgers'
UNION
Select id,name,somefield1 from TableB
WHERE Name ='mooseburgers'
Позволит вам показать результаты из обеих таблиц с объединением результатов в одну таблицу.