В MySQL действительно ли возможно ВЫБРАТЬ из двух таблиц и объединить столбцы?

Если у меня есть две таблицы в 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
8
задан Travis 26 May 2010 в 13:51
поделиться

4 ответа

Вы можете объединить столбцы из обеих таблиц, используя (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 ).

8
ответ дан 5 December 2019 в 15:20
поделиться

Я не уверен, что вы имеете в виду под слиянием, но вы можете UNION результаты:

SELECT id, name, somefield1 FROM TABLEA WHERE name="mooseburgers"
union all
SELECT id, name, somefield1 FROM TABLEB WHERE name="mooseburgers"; 
2
ответ дан 5 December 2019 в 15:20
поделиться

Возможно, вы имеете в виду

SELECT tableA.id, tableA.name, tableA.somefield1
FROM tableA, tableB
WHERE tableA.name = tableB.name AND tableA.name="mooseburgers"
0
ответ дан 5 December 2019 в 15:20
поделиться

В зависимости от того, что вы подразумеваете под объединением, вот возможное решение.

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

Позволит вам показать результаты из обеих таблиц с объединением результатов в одну таблицу.

1
ответ дан 5 December 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: