我有2個非常大的表。我試圖弄清楚他們有什麼共同之處。SQL在不同的表中找到相同的列
它們沒有相同數量的列。我可以去查看每個表中的每個列名並進行比較 - 但它們都有數百個列(我必須爲許多這樣的表執行)。
我使用MS Sql服務器。
在它們中沒有任何約束和沒有外鍵。
我該如何去做呢?
事情是這樣的:
select * AS "RES" from Table1 where RES IN (select * column from Table2)
在此先感謝。
我有2個非常大的表。我試圖弄清楚他們有什麼共同之處。SQL在不同的表中找到相同的列
它們沒有相同數量的列。我可以去查看每個表中的每個列名並進行比較 - 但它們都有數百個列(我必須爲許多這樣的表執行)。
我使用MS Sql服務器。
在它們中沒有任何約束和沒有外鍵。
我該如何去做呢?
事情是這樣的:
select * AS "RES" from Table1 where RES IN (select * column from Table2)
在此先感謝。
如果你正在尋找這是兩個表之間的相同,這應該を列名RK:
select name from syscolumns sc1 where id = object_id('table1') and exists(select 1 from syscolumns sc2 where sc2.name = sc1.name and sc2.id = object_id('table2'))
你也可以確保他們折騰並sc1.xtype = sc2.xtype子查詢是同一類型。
這是否適用於Oracle,MySQL,DB2和所有其他RDBMS以及SQL Server?不知道什麼數據庫,你怎麼能說這是一個答案? –
這個問題提到了SQL Server,因此僅適用於SQL Server的答案就足夠了。當涉及到這樣的事情時,我不會期望有足夠通用的東西來處理每個系統。這在SQL Server上爲我工作,爲此投了贊成票。 – joshhendo
如果我理解正確,您試圖比較兩個表中的數據並檢查數據的共同點。
前提是你必須要使用比較(Table1.YourColumn
和Table2.OtherColumn
,在本例中)的列,你可以這樣做:
select YourColumn from Table1 t1
where exists (select OtherColumn
from Table2 t2
where t2.OtherColumn = t1.YourColumn)
這裏是要找到在兩個不同的表共同列的SP ..
作品在SQL Server
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE GetColumnsData(@T_NAME1 varchar,@T_NAME2 varchar)
AS
BEGIN
DECLARE @Co int;
SET @co = 0;
CREATE TABLE #TEMP_TABLE(C_NAME VARCHAR(50),D_TYPE VARCHAR(50),T_NAME VARCHAR(50));
INSERT INTO #TEMP_TABLE (C_NAME,D_TYPE,T_NAME)(SELECT COLUMN_NAME,DATA_TYPE,
TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @T_NAME1 OR
TABLE_NAME= @T_NAME2);
SELECT @Co = COUNT(*) from #TEMP_TABLE t , #TEMP_TABLE t1 WHERE t1.C_NAME = t.C_NAME
and t.D_TYPE = t1.D_TYPE and t.T_NAME != t1.T_NAME
PRINT @co
END
假設您的RDBMS支持摘要,您可以計算每行的摘要並加入摘要。類似於:
SELECT T1.*
FROM
(SELECT *, MD5(col1, col2,...) as digest
FROM Table1) T1,
(SELECT *, MD5(col1, col2,...) as digest
FROM Table2) T2
WHERE T1.digest = T2.digest
我假設這兩個表具有相同的列和列類型。
我是新來的,所以我不確定我是否應該自己編輯它,但是你有兩個T1,其中一個應該是T2。 –
嘿,謝謝。固定。 – Jason
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX), @Table1 AS NVARCHAR(MAX)='Table1' , @Table2 AS NVARCHAR(MAX)='Table2'
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(A.COLUMN_NAME)
from INFORMATION_SCHEMA.COLUMNS A
join INFORMATION_SCHEMA.COLUMNS B
on A.COLUMN_NAME = B.COLUMN_NAME
where A.TABLE_NAME = @Table1
and B.TABLE_NAME = @Table2 and A.COLUMN_NAME not in ('Doc','CreatedBy')
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT ' + @cols + '
from
(select A.COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS A
join INFORMATION_SCHEMA.COLUMNS B
on A.COLUMN_NAME = B.COLUMN_NAME
where A.TABLE_NAME = '''[email protected]+'''
and B.TABLE_NAME = '''[email protected]+'''
) x
pivot
(
Max(COLUMN_NAME)
for COLUMN_NAME in (' + @cols + ')
) p '
execute sp_executesql @query
什麼RDBMS?您將需要查詢各種數據庫系統之間的元數據。 – JNK
你的意思是他們有類似的欄目?你爲什麼不檢查表格定義並找出它們之間的相似之處? – Rahul
你是在談論比較這些表中的數據還是你在談論比較表的簽名? –