2013-10-08 4 views
1

У меня есть две таблицы, таблицы 1 и таблицы 2.Как удалить общие поля в двух таблицах

Поля таблицы 1: book,pen,pencil,bag

Поля таблицы 2 являются: car,van,book,bike,pencil

Когда я запускаю запрос, я хочу, чтобы запрос игнорировал дубликаты или общие поля и возвращал другое поле.

Выход должен быть следующим,

car,van,bike,pen,bag 
+0

ли вы какое-либо соединение между этими двумя таблицами? –

+0

Да, пожалуйста, какова общая информация, содержащаяся в обеих таблицах, которая позволяет присоединиться? есть ли один? (например, customer_id, product_id ...) –

+0

Являются ли они значениями одного столбца? или имена столбцов? Другими словами, что вы подразумеваете под * полями *? В настоящее время я голосую, чтобы приостановить это. –

ответ

0

Вы пробовали н так:

delete form X 
where (car = 
    Select distinct car 
    from X 
    where x); 

различны -> вернуть значения дифферент.

+0

Он не хочет удалять дубликаты, он хочет запустить запрос, который не возвращает дубликаты. Кроме того, он не хочет получать значения unqiue, а только значения, которые не имеют дубликатов. –

+0

ОК! извините, поймите неправильно. – ZaoTaoBao

0
WITH uniontables AS (
    SELECT NULL AS car, 
      NULL AS van, 
      book, 
      NULL AS bike, 
      pen, 
      pencil, 
      bag 
    FROM  [Table 1 ] 
    UNION 
    SELECT car, 
      van, 
      book, 
      bike, 
      NULL AS pen, 
      pencil, 
      NULL AS bag 
    FROM [Table 2 ]) 

    SELECT DISTINCT * FROM uniontables 
+0

Это должно дать вам поля, и любые повторяющиеся строки будут удалены .. извините за форматирование, которое я все еще привык к публикации –

+0

Если вы хотите, чтобы дубликаты были взяты из каждой таблицы, вы должны использовать DISTINCT в каждом заявлении select внутри (SELECT DISTINCT NULL AS, NULL AS van, book, NULL AS, велосипед, ручка, карандаш, сумка ОТ [Таблица 1] UNION SELECT DISTINCT автомобиль, фургон, книга, велосипед, NULL AS ручка, карандаш, NULL AS bag FROM [Таблица 2]) SELECT DISTINCT * FROM uniontables –

2

Возможно:

SELECT x.thing FROM 
(
    SELECT thing FROM dbo.Table1 
    UNION ALL 
    SELECT thing FROM dbo.Table2 
) X 
GROUP BY x.thing 
Having Count(*) = 1 

Demo

Тем не менее, это также будет удалять элементы, которые являются дубликатами в их таблице, которые могут или не могут быть желательными.

0

попробовать это один:

declare @table1 table (col1 varchar(max)) 
declare @table2 table (col1 varchar(max)) 

insert into @table1 values 
('book'),('pen'),('pencil'),('bag') 

insert into @table2 values ('car'),('van'),('book'),('bike'),('pencil') 

;with cte 
as (
select COUNT(1) as total_item, col1 from (
select col1 from @table1 
union all 
select col1 from @table2 
)a group by col1 
) 

select col1 from cte where total_item = 1 
Смежные вопросы