2012-01-15 2 views
2

У меня следующие таблицы;объединение двух таблиц - пересечение двух таблиц

A B      A B 
_____      _____ 
1 t      7 a 
2 r      5 d 
3 e      3 e 
4 f      9 a 
5 d      10 c 
6 s      11 a 
7 a 

И, выход должен быть;

A B      
_____      
1 t      
2 r      

4 f 

6 s 

9 a 
10 c 
11 a 

Другими словами, я хочу действительно другую вещь. Я могу сказать только с this figure, взгляните на. Я хочу (объединение B). Как я могу это сделать?

+2

Do объединение (все), группы и фильтра количество> 1 – nan

+1

Что вы хотите это * дополнение * союзной B , или пересечение дополнения A с дополнением к B (закон Де Моргана). Кроме того, вопрос будет более ясным, если вы помечаете свои столбцы по-разному от своих таблиц (оба являются A и B). –

+0

Кроме того, ваша диаграмма не совсем разъясняет, что вы хотите, как C! = Ожидаемый результат, описанный в вопросе. –

ответ

4

Этот запрос будет делать это. Он загружает все записи из обеих таблиц, а затем отображает все те, которые существуют как только

SELECT 
    A, B 
FROM 
    (SELECT A, B FROM TABLE1 
    UNION ALL 
    SELECT A, B FROM TABLE2) 
    AS COMBINED 
GROUP BY 
    A, B 
HAVING 
    COUNT(*) = 1 
ORDER BY A; 
+1

только что заметил. То, что сказал Анджей Носаль – Gary

+0

Гэри, я пытаюсь просто загрузить все записи из всех столбцов в две маленькие таблицы для SQLite-запроса в Android Studio. Но я борюсь с синтаксисом. Вы знаете, что я здесь делаю неправильно? String select = "SELECT * FROM (SELECT * FROM" + TOTALCOUNT + "UNION ALL SELECT * FROM" + USERINPUTS) + "AS COMBINED"; – AJW

+0

@AJW Наверное, лучше, если вы поднимете это как отдельный вопрос, так что не только я смотрю на него. У меня нет опыта работы с Android Studio – Gary

-1

Просто

SELECT a, b FROM table1 UNION SELECT a, b FROM table2; 
+0

Хотя технически это правильный ответ (объединение B), должно быть очевидно, прочитав остальную часть вопроса, что это не то, что требует специалист. –

0
SELECT iResult.* 
FROM 
    (SELECT A, B 
    FROM tableA 
    WHERE A NOT IN 
     (SELECT Distinct A FROM tableB) 
    UNION 
    SELECT A, B 
    FROM tableB 
    WHERE A NOT IN 
     (SELECT Distinct A FROM tableB)) as iResult 
1
SELECT f.A, f.B 
FROM firstTable f 
LEFT JOIN secondTable s ON (f.A = s.A) 
WHERE (s.A IS NULL) 
UNION 
SELECT s.A, s.B 
FROM firstTable f 
RIGHT JOIN secondTable s ON (f.A = s.A) 
WHERE (f.A IS NULL) 
0
SELECT A, B 
FROM Table1 

UNION 

SELECT A, B 
FROM Table2 

EXCEPT 

SELECT t1.A, t1.B 
FROM Table1 t1 
    INNER JOIN Table2 t2 ON t1.A = t2.A AND t1.B = t2.B 
+0

Это изящно, хотя стоит отметить, что MySQL по-прежнему не поддерживает EXCEPT *, хотя это стандартный SQL 92. * Начиная с версии 5.0.13 –

+1

@TimGee: Я думаю, вы должны быть правы. Тем не менее, на данный момент вопрос помечен как 'sqlite'. :) –

+0

Можно заменить последнюю часть (внутреннее соединение) на «SELECT A, B FROM Table1 INTERSECT SELECT A, B FROM Table2» и добавить парсеры для ясности и безопасности, поскольку приоритет для 'INTERSECT',' EXCEPT' и 'UNION' зависит от реализации. – onedaywhen

0

Редактировать Удалены до «решение», так как я понял, что это то же самое, предложенной Gary ,

(select a, b from table_1 minus 
select a, b from table_2)  union 
(select a, b from table_2 minus 
select a, b from table_1); 

Это, казалось, работать с данными followoing на Oracle:

create table table_1 (
    a number, 
    b varchar(2) 
); 

create table table_2 (
    a number, 
    b varchar(2) 
); 


insert into table_1 values (1 ,'t'); 
insert into table_1 values (2 ,'r'); 
insert into table_1 values (3 ,'e'); 
insert into table_1 values (4 ,'f'); 
insert into table_1 values (5 ,'d'); 
insert into table_1 values (6 ,'s'); 
insert into table_1 values (7 ,'a'); 

insert into table_2 values (7 ,'a'); 
insert into table_2 values (5 ,'d'); 
insert into table_2 values (3 ,'e'); 
insert into table_2 values (9 ,'a'); 
insert into table_2 values (10 ,'c'); 
insert into table_2 values (11 ,'a'); 
+0

Я не думаю, что MINUS является стандартом SQL, хотя я подозреваю, что все, что вам нужно сделать, это изменить его на EXCEPT для лучшей совместимости. Тем не менее, MySQL не поддерживает EXCEPT. –

Смежные вопросы