2009-10-19 3 views
1

Мне нужен запрос, чтобы сделать выбор по таблице1 и таблице2. Я хочу, чтобы они отображались как общий результат, но без какой-либо связи нет значения из таблицы 1, которое соответствует любому значению из таблицы 2. Поэтому, если результат был из таблицы1, он должен содержать значения table1.a, table1.b, table1.c, если он исходит из таблицы2, он должен иметь table2.d, table2.e, table2.f с пустыми значениями a, b, c.MYSQL: две таблицы SELECT без общих значений

SELECT * FROM table1, table2 

... не помогает мне, потому что он всегда делает соединения, соединяет результат table1 и table2 в одном результате. Мне нужно, чтобы они были раздельными, каждый результат имеет свою собственную строку.

Простенько, сложно или невозможно?

ответ

4

Вы должны использовать один и тот же псевдоним для эквивалентных столбцов из обеих таблиц, как в:

(select a as FIRST_COL 
    from table 1 
) 
union 
(select d as FIRST_COL 
    from table2 
) 
2

До тех пор, пока типы столбцов совпадают, вы можете использовать объединение. Например:

select a, b, c 
from table1 
union 
select d, e, f 
from table2 

Если они не совпадают, вы можете сделать это путем создания столбцов «пустышка». Пока тип и количество столбцов одинаковы, результаты будут отображаться как один ряд строк.

+0

спасибо всем за помощь! отлично работает – 2009-10-19 20:14:22

0

Попробуйте это:

SELECT * FROM table1 UNION SELECT * FROM table2 
+0

Если я ошибаюсь, это будет работать, только если количество столбцов в таблице 1 равно количеству столбцов в таблице2. Но прошло некоторое время с тех пор, как я сделал UNION в MySQL, возможно, это изменилось. – Tenner

+0

Да, я думаю, что число и тип столбцов должны быть одинаковыми и, возможно, именами/алиасами. Но запрос UNION - это путь. – gkrogers

2

Если я понимаю ваше желание выбрать, б, в, '', '', '' из table1 союза '', '', '', е, f, g из таблицы2

замените '' любимым держателем места для пустой колонки a, b, c - названия колонок.

0

Я пытался сделать что-то подобное и не был очень доволен любые ответы, которые я нашел, так что я придумал с последующей реализацией.

/* Create Sample Data 
*/ 
declare @a table(a varchar(max)) 
declare @b table(b varchar(max)) 
insert @a (a) 
values('a1'),('a2'),('a3'),('a4'); 

insert @b (b) 
values('b1'),('b2'),('b3'); 

/* Show Cartesian Intersection of both tables 
*/ 
select * from @a, @b 

/* Create matching table variables with ID column 
*/ 
declare @aIdx table(a varchar(max), Id int identity(1,1)) 
declare @bIdx table(b varchar(max), Id int identity(1,1)) 

insert into @aIdx (a) 
select a 
from @a 

insert into @bIdx (b) 
select b 
from @b 

/* Join Record by Record 
*/ 
select 
    l.Id, 
    l.a, 
    r.b 
from @aIdx l full outer join @bIdx r on l.Id = r.Id 

декартовой из двух таблиц:

a1 b1 
a2 b1 
a3 b1 
a4 b1 
a1 b2 
a2 b2 
a3 b2 
a4 b2 
a1 b3 
a2 b3 
a3 b3 
a4 b3 

Регистрация Запись по записи:

1 a1 b1 
2 a2 b2 
3 a3 b3 
4 a4 NULL 
Смежные вопросы