2016-04-11 8 views
0

Я хочу добавить строки из таблицы alpha, которая имеет то же значение в столбце a, что и таблица beta.SQL - комбинированные результаты из двух таблиц

Например:

таблица альфа:

a b c 
1 2 6 
1 4 5 
2 6 7 
2 4 9 
6 4 3 
6 3 2 

таблица бета:

a y z 
1 2 3 
2 4 5 
6 4 9 
8 5 3 
9 4 3 

просил ruselt:

, например, где а = 2:

a ? ? 
2 4 5 
2 6 7 
2 4 9 

и где а = 6:

a ? ? 
6 4 9 
6 4 3 
6 3 2 

Как я могу это сделать?

Заранее благодарен!

+0

при а = 2, как вы вычислить 1-й линии & такой же вопрос, когда а = 6, как вы расчета 1-й линии ? Я хочу знать, что такое формула для расчета 1-й строки ... –

ответ

1

Вы можете achive результат вы хотите с помощью union в производной таблице, а затем отфильтровать результат:

select * 
from (
    select a,b,c from alpha 
    union all 
    select a,y,z from beta 
) u 
where a = 6 
3
select * from table alpha where id a=2 
union all 
select * from table beta where id a=2 
+0

да союз все работает! но есть ли способ каким-либо образом отметить дополнительные строки? –

+0

, если вы не хотите использовать объединение, вы можете сделать это, используя временную таблицу. CREATE TABLE temp_ids (ID INT); INSERT INTO temp_ids SELECT ID FROM a; INSERT INTO temp_ids SELECT ID FROM b; SELECT DISTINCT ID FROM temp_ids; –

+0

Этот метод предпочтительнее в MySQL, потому что MySQL материализует подзапросы (практически в любой другой базе данных эти два должны быть одинаковыми). –

0

Если я правильно понял, вы хотите вставить эти строки из Альфа Бета с теми же значениями в столбце a. Вы можете попробовать CTE для этого.

;WITH cte_getData 
AS 
(
SELECT A.a,b,c FROM 
Alpha A 
INNER JOIN 
Beta B 
ON A.a = B.a) 
INSERT INTO Beta 
SELECT * FROM cte_getData 

Хотя это не проверяет, существует ли эта строка в бета-версии или нет. Если вы хотите также рассмотреть этот случай, вы можете использовать LEFT OUTER JOIN и проверить A.a = NULL в CTE.

1

Вы можете пометить результат из таблицы они получили с помощью ниже Sql

select a,b,c, 'tableAlpha' from alpha where a = 2 
union all 
select a,b,c, 'tableBetha' from betha where a = 2 
Смежные вопросы