SQL iki tablodaki verileri karşılaştırır


90

2 tablom var TableAve TableBbunlar aynı sütun biçimine sahip, örneğin her iki tablo TableAve TableBsütunlara sahip

A B C D E F 

burada A ve B birincil anahtarlardır.

Eğer kontrol etmek SQL nasıl yazılır TableAve TableBaynı birincil anahtarlara sahip her sütunlarda aynı değeri içerir.

Bu, bu iki tablonun tamamen aynı verilere sahip olduğu anlamına gelir.

Yanıtlar:


82

DBMS'niz tarafından kullanılan SQL'in çeşidine bağlı olarak "EKSİ" veya "HARİÇ" yapabilirsiniz.

select * from tableA
minus
select * from tableB

Sorgu hiçbir satır döndürmezse, veriler tamamen aynıdır.


5
Mükemmel öneri. Bununla birlikte, eğer tableB'de fazladan satır (lar) varsa bunun işe yaramayacağını düşünüyorum, bu nedenle ek olarak satır sayılarını karşılaştırmak isteyebilirsiniz.
jzd

5
Tam tersi. tableAFazladan satırlar varsa çalışmaz . Bunun (A EXCEPT B) INTERSECT (B EXCEPT A)bir bataklık standart birleşiminden çok daha az verimli olacağını tahmin etmeliyim.
Martin Smith

sorgu iki sonuç kümesi döndürür?
BuZz

Bu sorgu, varsa NULLS içeren satırları döndürür.
Reeya Oberoi

6
@Franklin - Hayır, yalnızca bir sonuç kümesi döndürmelidir. İki tane alıyorsanız, EKSİ yerine EXCEPT kullanın.
MTS

57

İlişkisel operatörleri kullanma:

SELECT * FROM TableA
UNION 
SELECT * FROM TableB
EXCEPT 
SELECT * FROM TableA
INTERSECT
SELECT * FROM TableB;

Değişim EXCEPTiçin MINUSOracle için.

Biraz seçici nokta: Yukarıdakiler, SQL Standardına göre uygulamaya bağlı olan operatör önceliğine dayanır, yani YMMV. Önceliği şu olan SQL Server için çalışır:

  1. Parantez içindeki ifadeler
  2. INTERSECT
  3. EXCEPTve UNIONsoldan sağa doğru değerlendirilir.

Oracle için, UNION'ın etrafında parantezler kullanmanız, INTERSECT'in etrafında parantezler kullanmanız ve (belirtildiği gibi) EXCEPT'i MINUS ile değiştirmeniz gerekir. HTH.
Doug Clutter

20

dietbuddha'nın güzel bir cevabı var. EKSİ veya HARİÇ seçeneğinizin olmadığı durumlarda, seçeneklerden biri tablolar arasında bir birleşim yapmak, tüm sütunlarla gruplamak ve her şeyden iki tane bulunduğundan emin olmaktır:

SELECT col1, col2, col3
FROM
(SELECT * FROM tableA
UNION ALL  
SELECT * FROM tableB) data
GROUP BY col1, col2, col3
HAVING count(*)!=2

Bunu kullanmayı denedim ( Jeff'in SQL Server Blogundan aldım ) ancak satırlardaki farklılıkları görsel olarak görebilmem için TableA ve TableB'deki her iki satırı da listelemek istiyorum. Bunun nasıl yapılacağını açıklar mısın?
Emmanuel F

@Agent, bu ayrı bir soru gibi görünüyor. Sadece burada bir yorum yapmak yerine başkalarının görmesi için listelemenizi öneririm.
jzd

Bitti. Ve bitti. 2 tablonun değerlerini karşılaştırmak ve farklı olan satırları listelemek . Umarım harika sonuçlar alırım. :)
Emmanuel F

Bu, Visual FoxPro gibi sınırlı SQL ortamlarında iyi çalışıyor, teşekkürler!
Kit Roed

1
Sadece bunu gözden geçiriyorum. Birincil anahtarların tablolarda benzersiz kayıtlar sağladığından bahsetmeye değer. Bir tablo (veya sorgu) yinelenen satırlara sahipse DISTINCT/ GROUP BYtablo başına yalnızca bir kayıt olduğundan emin olmak için birleşmedeki alt sorgular için önerilir. Aksi takdirde, TableA 2 kayıt alabilir ve TableB 0 olabilir ve HAVING koşulunu karşılamayabilir.
vol7ron

8
SELECT c.ID
FROM clients c
WHERE EXISTS(SELECT c2.ID 
FROM clients2 c2
WHERE c2.ID = c.ID);

Her iki tabloda da AYNI olan tüm ID'leri döndürür. Farklılıkları elde etmek için MEVCUT DEĞİL olarak değiştirin.


3

Bir günden itibaren komut dosyasını alarak, her girişin hangi tablodan geldiğini de gösterecek şekilde değiştirdim.

DECLARE @table1 NVARCHAR(80)= 'table 1 name'
DECLARE @table2 NVARCHAR(80)= 'table 2 name'
DECLARE @sql NVARCHAR (1000)

SET @sql = 
'
SELECT ''' + @table1 + ''' AS table_name,* FROM
(
SELECT * FROM ' + @table1 + '
EXCEPT
SELECT * FROM ' + @table2 + '
) x

UNION 

SELECT ''' + @table2 + ''' AS table_name,* FROM 
(
SELECT * FROM ' + @table2 + '
EXCEPT
SELECT * FROM ' + @table1 + '
) y
'

EXEC sp_executesql @stmt = @sql

2

sadece tamamlamak için, 2 tabloyu karşılaştırmak ve 3 hata durumu ile aynı tabloda sonuç vermek için hariç yöntem kullanılarak depolanan bir işlem, ADD, DEL, GAP tablosu aynı PK'ye sahip olmalıdır, 1 veya her iki tabloyu karşılaştırmak için 2 tabloyu ve alanı beyan edersiniz

Sadece bu ps_TableGap 'tbl1', 'Tbl2', 'fld1, fld2, fld3', 'fld4'fld5'fld6' gibi kullanın (isteğe bağlı)

/****** Object:  StoredProcedure [dbo].[ps_TableGap]    Script Date: 10/03/2013 16:03:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:       Arnaud ALLAVENA
-- Create date: 03.10.2013
-- Description: Compare tables
-- =============================================
create PROCEDURE [dbo].[ps_TableGap]
    -- Add the parameters for the stored procedure here
    @Tbl1 as varchar(100),@Tbl2 as varchar(100),@Fld1 as varchar(1000), @Fld2 as varchar(1000)= ''
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.

    SET NOCOUNT ON;
--Variables
--@Tbl1 = table 1
--@Tbl2 = table 2
--@Fld1 = Fields to compare from table 1
--@Fld2 Fields to compare from table 2
Declare @SQL varchar(8000)= '' --SQL statements
Declare @nLoop int = 1 --loop counter
Declare @Pk varchar(1000)= '' --primary key(s) 
Declare @Pk1 varchar(1000)= '' --first field of primary key
declare @strTmp varchar(50) = '' --returns value in Pk determination
declare @FldTmp varchar (1000) = '' --temporarily fields for alias calculation

--If @Fld2 empty we take @Fld1
--fields rules: fields to be compare must be in same order and type - always returns Gap
If @Fld2 = '' Set @Fld2 = @Fld1

--Change @Fld2 with Alias prefix xxx become _xxx 
while charindex(',',@Fld2)>0
begin
    Set @FldTmp = @FldTmp + (select substring(@Fld2,1,charindex(',',@Fld2)-1) + ' as _' + substring(@Fld2,1,charindex(',',@Fld2)-1) + ',')
    Set @Fld2 = (select ltrim(right(@Fld2,len(@Fld2)-charindex(',',@Fld2))))
end
Set @FldTmp = @FldTmp + @Fld2 + ' as _' + @Fld2
Set @Fld2 = @FldTmp

--Determinate primary key jointure
--rule: same pk in both tables
Set @nLoop = 1
Set @SQL = 'Declare crsr cursor for select COLUMN_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where TABLE_NAME = '''
 + @Tbl1 + ''' or TABLE_SCHEMA + ''.'' + TABLE_NAME = ''' + @Tbl1 +  ''' or TABLE_CATALOG + ''.'' + TABLE_SCHEMA + ''.'' + TABLE_NAME = ''' + @Tbl1 
 + ''' order by ORDINAL_POSITION'
exec(@SQL)
open crsr 
fetch next from crsr into @strTmp
while @@fetch_status = 0
begin 
    if @nLoop = 1 
    begin 
        Set @Pk = 's.' + @strTmp + ' = b._' + @strTmp
        Set @Pk1 = @strTmp
        set @nLoop = @nLoop + 1 
    end 
    Else
    Set @Pk = @Pk + ' and s.' + @strTmp + ' = b._' + @strTmp
fetch next from crsr into @strTmp 

end 
close crsr
deallocate crsr

--SQL statement build
set @SQL = 'select case when s.' + @Pk1 + ' is null then ''Del'' when b._' + @Pk1 + ' is null then ''Add'' else ''Gap'' end as TypErr, '''
set @SQL = @SQL + @Tbl1 +''' as Tbl1, s.*, ''' + @Tbl2 +''' as Tbl2 ,b.* from (Select ' + @Fld1 + ' from ' + @Tbl1
set @SQL = @SQL + ' EXCEPT SELECT ' + @Fld2 + ' from ' + @Tbl2 + ')s full join (Select ' + @Fld2 + ' from ' + @Tbl2 
set @SQL = @SQL + ' EXCEPT SELECT ' + @Fld1 + ' from ' + @Tbl1 +')b on '+ @Pk 

--Run SQL statement
Exec(@SQL)
END

2

Kaynak: SQL'deki iki tabloyu Lukas Eder tarafından karşılaştırmak için NATURAL FULL JOIN kullanın

NATURAL FULL JOINİki tablo arasındaki aynı / farklı satırları algılamak için akıllıca bir yaklaşım .

Örnek 1 - durum bayrağı:

SELECT t1.*, t2.*, CASE WHEN t1 IS NULL OR t2 IS NULL THEN 'Not equal' ELSE 'Equal' END
FROM t1
NATURAL FULL JOIN t2;

Örnek 2 - satırları filtreleme

SELECT *
FROM (SELECT 't1' AS t1, t1.* FROM t1) t1 
NATURAL FULL JOIN (SELECT 't2' AS t2, t2.* FROM t2) t2 
WHERE t1 IS NULL OR t2 IS NULL -- show differences
--WHERE  t1 IS NOT NULL AND t2 IS NOT NULL    -- show the same

db <> fiddle demosu


1

Dietbuddha'nın cevabının iyileştirilmesi ...

select * from
(
    select * from tableA
    minus
    select * from tableB
)
union all
select * from
(
    select * from tableB
    minus
    select * from tableA
)

1

Oracle'da tümünü ekle ve tam dış birleştirme kombinasyonunu kullanarak 2 tablonun farklarını bulabilirsiniz. Sql'de farklılıkları tam dış birleştirme yoluyla elde edebilirsiniz, ancak görünen o ki sql'de all / first yok! Bu nedenle, bunun yerine aşağıdaki sorguyu kullanmanız gerekir:

select * from A
full outer join B on
A.pk=B.pk
where A.field1!=B.field1
or A.field2!=B.field2 or A.field3!=B.field3 or A.field4!=B.field4 
--and A.Date==Date1

Burada yan tümcenin kullanılması önerilmez ve genellikle daha düşük performansla sonuçlanır, ancak tablolarınız çok büyük değilse yukarıdaki sorguyu yine de kullanabilirsiniz. Yukarıdaki sorgu için herhangi bir sonuç varsa, 1,2,3,4 alanlarının karşılaştırılmasına göre 2 tablonun farkı tam olarak budur. Sorgu performansını iyileştirmek için, tarihe göre de filtreleyebilirsiniz (yorum yapılan kısmı kontrol edin)


0
    SELECT unnest(ARRAY[1,2,2,3,3]) 
    EXCEPT
    SELECT unnest(ARRAY[1,1,2,3,3])
UNION
    SELECT unnest(ARRAY[1,1,2,3,3])
    EXCEPT
    SELECT unnest(ARRAY[1,2,2,3,3])

Sonuç boş, ancak kaynaklar farklı!

Fakat:

(
    SELECT unnest(ARRAY[1,2,2,3])
    EXCEPT ALL
    SELECT unnest(ARRAY[2,1,2,3])
)
UNION
(
    SELECT unnest(ARRAY[2,1,2,3])
    EXCEPT ALL
    SELECT unnest(ARRAY[1,2,2,3])
)

İşler.


0

Aynı sorunu SQL Server'da yaşadım ve işlemi otomatikleştirmek için bu T-SQL betiğini yazdım (aslında bu sulandırılmış sürüm, benimki kolay raporlama için tüm farklılıkları tek bir tabloya yazdı).

Karşılaştırmak istediğiniz tabloların adlarına 'MyTable' ve 'MyOtherTable'ı güncelleyin.

DECLARE @ColName varchar(100)
DECLARE @Table1 varchar(100) = 'MyTable'
DECLARE @Table2 varchar(100) = 'MyOtherTable'


IF (OBJECT_ID('tempdb..#col') IS NOT NULL) DROP TABLE #col
SELECT  IDENTITY(INT, 1, 1) RowNum , c.name
INTO    #col
FROM    SYS.Objects o 
        JOIN SYS.columns c on o.object_id = c.object_id
WHERE   o.name = @Table1 AND NOT c.Name IN ('List','Columns','YouWantToIgnore')

DECLARE @Counter INT = (SELECT MAX(RowNum) FROM #col)

    WHILE @Counter > 0

        BEGIN
            SET @ColName = (SELECT name FROM #Col WHERE RowNum= @Counter)
                EXEC ('SELECT  t1.Identifier
                        ,t1.'+@ColName+' AS '+@Table1+@ColName+'
                        ,t2.'+@ColName+' AS '+@Table2+@ColName+'
                FROM    '+@Table1+' t1
                        LEFT JOIN '+@Table2+' t2 ON t1.Identifier = t2.Identifier 
                WHERE   t1.'+@ColName+' <> t2.'+@ColName)
            SET @Counter = @Counter - 1 
        END

0

Bunu Oracle'dan SQL Server'a taşıdığım oldukça kötü bir görünümün sonuçlarını karşılaştırmak için yazdım. Tablolardaki verilerdeki ve tabloların şemasındaki farklılıklar (tahmin ettiniz) ile bir çift geçici tablo (#DataVariances ve #SchemaVariances) oluşturur.

Her iki tablonun da birincil anahtarı olmasını gerektirir, ancak kaynak tabloların bir tane yoksa bir kimlik sütunuyla tempdb'ye bırakabilirsiniz.

declare @TableA_ThreePartName nvarchar(max) = ''
declare @TableB_ThreePartName nvarchar(max) = ''
declare @KeyName nvarchar(max) = ''

/***********************************************************************************************

    Script to compare two tables and return differneces in schema and data.

    Author: Devin Lamothe       2017-08-11

***********************************************************************************************/
set nocount on

-- Split three part name into database/schema/table
declare @Database_A nvarchar(max) = (
    select  left(@TableA_ThreePartName,charindex('.',@TableA_ThreePartName) - 1))
declare @Table_A nvarchar(max) = (
    select  right(@TableA_ThreePartName,len(@TableA_ThreePartName) - charindex('.',@TableA_ThreePartName,len(@Database_A) + 2)))
declare @Schema_A nvarchar(max) = (
    select  replace(replace(@TableA_ThreePartName,@Database_A + '.',''),'.' + @Table_A,''))

declare @Database_B nvarchar(max) = (
    select  left(@TableB_ThreePartName,charindex('.',@TableB_ThreePartName) - 1))
declare @Table_B nvarchar(max) = (
    select  right(@TableB_ThreePartName,len(@TableB_ThreePartName) - charindex('.',@TableB_ThreePartName,len(@Database_B) + 2)))
declare @Schema_B nvarchar(max) = (
    select  replace(replace(@TableB_ThreePartName,@Database_B + '.',''),'.' + @Table_B,''))

-- Get schema for both tables
declare @GetTableADetails nvarchar(max) = '
    use [' + @Database_A +']
        select  COLUMN_NAME
             ,  DATA_TYPE
          from  INFORMATION_SCHEMA.COLUMNS
         where  TABLE_NAME = ''' + @Table_A + '''
           and  TABLE_SCHEMA = ''' + @Schema_A + '''
    '
create table #Table_A_Details (
    ColumnName nvarchar(max)
,   DataType nvarchar(max)
)
insert into #Table_A_Details
exec (@GetTableADetails)

declare @GetTableBDetails nvarchar(max) = '
    use [' + @Database_B +']
        select  COLUMN_NAME
             ,  DATA_TYPE
          from  INFORMATION_SCHEMA.COLUMNS
         where  TABLE_NAME = ''' + @Table_B + '''
           and  TABLE_SCHEMA = ''' + @Schema_B + '''
    '
create table #Table_B_Details (
    ColumnName nvarchar(max)
,   DataType nvarchar(max)
)
insert into #Table_B_Details
exec (@GetTableBDetails)


-- Get differences in table schema
            select  ROW_NUMBER() over (order by
                        a.ColumnName
                    ,   b.ColumnName) as RowKey
                 ,  a.ColumnName as A_ColumnName
                 ,  a.DataType as A_DataType
                 ,  b.ColumnName as B_ColumnName
                 ,  b.DataType as B_DataType
              into  #FieldList
              from  #Table_A_Details a
   full outer join  #Table_B_Details b
                on  a.ColumnName = b.ColumnName
             where  a.ColumnName is null
                or  b.ColumnName is null
                or  a.DataType <> b.DataType

        drop table  #Table_A_Details
        drop table  #Table_B_Details

            select  coalesce(A_ColumnName,B_ColumnName) as ColumnName
                 ,  A_DataType
                 ,  B_DataType
              into  #SchemaVariances
              from  #FieldList

-- Get differences in table data
declare @LastColumn int = (select max(RowKey) from #FieldList)
declare @RowNumber int = 1
declare @ThisField nvarchar(max)
declare @TestSql nvarchar(max)



create table #DataVariances (
    TableKey            nvarchar(max)
,   FieldName           nvarchar(max)
,   TableA_Value        nvarchar(max)
,   TableB_Value        nvarchar(max)
)

delete from #FieldList where A_DataType in ('varbinary','image') or B_DataType in ('varbinary','image') 

while @RowNumber <= @LastColumn begin
    set @TestSql = '
        select  coalesce(a.[' + @KeyName + '],b.[' + @KeyName + ']) as TableKey
             ,  ''' + @ThisField + ''' as FieldName
             ,  a.[' + @ThisField + '] as [TableA_Value]
             ,  b.[' + @ThisField + '] as [TableB_Value]
          from  [' + @Database_A + '].[' + @Schema_A + '].[' + @Table_A + '] a 
    inner join  [' + @Database_B + '].[' + @Schema_B + '].[' + @Table_B + '] b
            on  a.[' + @KeyName + '] = b.[' + @KeyName + ']
         where  ltrim(rtrim(a.[' + @ThisField + '])) <> ltrim(rtrim(b.[' + @ThisField + ']))
            or (a.[' + @ThisField + '] is null and  b.[' + @ThisField + '] is not null)
            or (a.[' + @ThisField + '] is not null and  b.[' + @ThisField + '] is null)
'

insert into #DataVariances
exec (@TestSql)

set @RowNumber = @RowNumber + 1
set @ThisField = (select coalesce(A_ColumnName,B_ColumnName) from #FieldList a where RowKey = @RowNumber)

end

drop table #FieldList

print 'Query complete.  Select from #DataVariances to verify data integrity or #SchemaVariances to verify schemas match.  Data types varbinary and image are not checked.'

0

Yanıtların çoğu, Kamil'in ortaya attığı sorunu görmezden geliyor gibi görünüyor. (Tabloların aynı satırları içerdiği, ancak her tabloda farklı olanların tekrarlandığı yer burasıdır.) Maalesef, Oracle'da olduğum için çözümünü kullanamıyorum. Bulabildiğim en iyi şey:

SELECT * FROM
   (
   SELECT column1, column2, ..., COUNT(*) AS the_count
   FROM tableA
   GROUP BY column1, column2, ...
   MINUS
   SELECT column1, column2, ..., COUNT(*) AS the_count
   FROM tableB
   GROUP BY column1, column2, ...
   )
UNION ALL
   (
   SELECT column1, column2, ..., COUNT(*) AS the_count
   FROM tableB
   GROUP BY column1, column2, ...
   MINUS
   SELECT column1, column2, ..., COUNT(*) AS the_count
   FROM tableA
   GROUP BY column1, column2, ...
   )

0

T1 (PK, A, B) ve T2 (PK, A, B) karşılaştırmak için.

Her iki tarafta da eksik anahtar değerlerini aramak için önce birincil anahtar kümelerini karşılaştırın:

SELECT T1.*, T2.* FROM T1 FULL OUTER JOIN T2 ON T1.PK=T2.PK WHERE T1.PK IS NULL OR T2.PK IS NULL;

Ardından tüm değer uyumsuzluklarını listeleyin:

SELECT T1.PK, 'A' AS columnName, T1.A AS leftValue, T2.A AS rightValue FROM T1 JOIN T2 ON T1.PK=T2.PK WHERE COALESCE(T1.A,0) != COALESCE(T2.A,0)
UNION ALL
SELECT T1.PK, 'B' AS columnName, T1.B AS leftValue, T2.B AS rightValue FROM T1 JOIN T2 ON T1.PK=T2.PK WHERE COALESCE(T1.B,0) != COALESCE(T2.B,0)

A ve B aynı türde olmalıdır. SELECT'i oluşturmak için BİLGİ ŞEMASI'nı kullanabilirsiniz. IS NULL sonuçlarını da dahil etmek için COALESCE'yi unutmayın. FULL OUTER JOIN ve COALESCE (T1.PK, 0) = COALESCE (T2.PK, 0) da kullanabilirsiniz.

Örneğin varchar türündeki sütunlar için:

SELECT concat('SELECT T1.PK, ''', COLUMN_NAME, ''' AS columnName, T1.', COLUMN_NAME, ' AS leftValue, T2.', COLUMN_NAME, ' AS rightValue FROM T1 JOIN T2 ON T1.PK=T2.PK WHERE COALESCE(T1.',COLUMN_NAME, ',0)!=COALESCE(T2.', COLUMN_NAME, ',0)')
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME='T1' AND DATA_TYPE IN ('nvarchar','varchar');

0

Aşağıdaki basit sorguyu kullanarak iki DB2 tablosundaki verileri karşılaştırabiliriz:

Adım 1: - Şema (S) tablosundan (T1) karşılaştırmamız gereken tüm sütunları seçin

     SELECT T1.col1,T1.col3,T1.col5 from S.T1

Adım 2: - 2 tabloyu karşılaştırmak için 'Eksi' anahtar kelimesini kullanın.

Adım 3: - Şema (S) tablosundan (T2) karşılaştırmamız gereken tüm sütunları seçin

     SELECT T2.col1,T2.col3,T2.col5 from S.T1

Sonuç:

     SELECT T1.col1,T1.col3,T1.col5 from S.T1
     MINUS 
     SELECT T2.col1,T2.col3,T2.col5 from S.T1;

Sorgu hiçbir satır döndürmezse, veriler tamamen aynıdır.


-1

"Eksi" nin desteklenmediği ve performansı hesaba katan MySQL'de bu hızlı

query:
SELECT 
t1.id, 
t1.id 
FROM t1 inner join t2 using (id) where concat(t1.C, t1.D, ...)<>concat(t2.C, t2.D, ...)

-1

Dietbuddha ve IanMc tarafından verilen yanıta dayalı alternatif, geliştirilmiş bir sorgu. Sorgu, satırların nerede olduğunu ve eksik olduğunu yararlı bir şekilde göstermek için açıklama içerir. (NB: SQL Server için )

(
    select 'InTableA_NoMatchInTableB' as Msg, * from tableA
    except
    select 'InTableA_NoMatchInTableB' , * from tableB
)
union all
(
    select 'InTableB_NoMatchInTableA' as Msg, * from tableB
    except
    select 'InTableB_NNoMatchInTableA' ,* from tableA
)

-1
SELECT * 
FROM TABLE A
WHERE NOT EXISTS (SELECT 'X' 
                  FROM  TABLE B 
                  WHERE B.KEYFIELD1 = A.KEYFIELD1 
                  AND   B.KEYFIELD2 = A.KEYFIELD2 
                  AND   B.KEYFIELD3 = A.KEYFIELD3)
;

'X' herhangi bir değerdir.

Farklı tutarsızlıkları görmek için tabloları değiştirin.

Tablolarınızdaki anahtar alanları birleştirdiğinizden emin olun.

Veya MINUS operatörünü 2 select deyimiyle kullanın, ancak MINUS yalnızca Oracle'da çalışabilir.


eksi tüm uygulamalarda desteklenmez. (örneğin sunucu sunucusu dışında kullanır).
Efendim
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.