比较基于任意顺序的多列的两个表?

时间:2012-07-02 13:35:56

标签: sql sql-server sql-update insert-update

我希望得到一些SQL Server脚本的帮助。

基本上,我有以下要求: 在数据库中,我们有一个名为Space的表。空间有长度和宽度。 我们需要从我们收到的excel表上传数据。所以我把它上传到一张桌子里,这张桌子也有长度和宽度。

现在,我需要将Oid从空间(Oid,长度,宽度)放入#spaceTmp表(NULL,Length,Width),但问题是长度和宽度可以按任何顺序匹配。

例: 空间表具有以下内容: (1,5,7)

#spaceTmp具有以下内容: (NULL,5,7) (NULL,7,5) (NULL,4,3) (NULL,3,4)

我需要#spaceTmp来: (1,5,7) (1,7,5) (2,4,3) (2,3,4)

任何建议都将受到赞赏。

P.S。为简单起见,我没有使用GUID,而是使用Oid列的整数

2 个答案:

答案 0 :(得分:1)

这样的东西?

UPDATE #spaceTemp SET Old = ID
FROM Space 
WHERE (Space.Width = #spaceTemp.Width AND Space.Length = #spaceTemp.Length)
OR (Space.Width = #spaceTemp.Length AND Space.Length = #spaceTemp.Width)

答案 1 :(得分:0)

试试这个:

/*
 -- Setup Script
SELECT NEWID() OID, 5 Width, 7 Length
    INTO #Space



SELECT NEWID() OID, 5 Width, 7 Length
    INTO #SpaceTemp

INSERT INTO #SpaceTemp
SELECT NULL OID, 5 Width, 7 Length

INSERT INTO #SpaceTemp
SELECT NULL OID, 7 Width, 5 Length


INSERT INTO #SpaceTemp
SELECT NULL OID, 4 Width, 3 Length

INSERT INTO #SpaceTemp
SELECT NULL OID, 3 Width, 4 Length

UPDATE #SpaceTemp SET OId = NULL;
*/
UPDATE a
        SET a.OId = COALESCE(b.OId, NEWID())
  FROM #SpaceTemp a LEFT JOIN #Space b
        ON (a.Width = b.Width AND a.Length = b.Length)
        OR (a.Width = b.Length AND a.Length = b.Width)




SELECT * FROM #SpaceTemp