【问题标题】:Following CROSS JOIN how to remove records comparing same record在 CROSS JOIN 之后如何删除比较相同记录的记录
【发布时间】:2015-08-05 22:31:38
【问题描述】:

我已经完成了 CROSS JOIN,将每条记录与所有其他记录进行比较。

但是,我想删除正在比较相同记录的那些。

最有效的方法是什么?

【问题讨论】:

  • 您能否提供一些查询文本或您当前拥有的 SQL 示例?

标签: cross-join


【解决方案1】:

这是你要找的吗?

SELECT * 
FROM Table1 
CROSS JOIN Table2
WHERE Table1.PrimaryKey <> Table2.PrimaryKey

【讨论】:

    【解决方案2】:

    不确定是否要在有重复项时从两个表中删除记录,但我会这样做。

    CREATE TABLE #TableA
    (
        PK_A INT IDENTITY(1,1) NOT NULL,
        Field1 INT,
        Field2 VARCHAR(20),
        Field3 BIT
    )
    INSERT INTO #TableA (Field1, Field2, Field3) VALUES (1, 'A', 0), (1, 'B', 1), (2, 'C', 1), (3, 'C', 0)
    
    CREATE TABLE #TableB
    (
        PK_B INT IDENTITY(10,10) NOT NULL,
        Field1 INT,
        Field2 VARCHAR(20),
        Field3 BIT
    )
    INSERT INTO #TableB (Field1, Field2, Field3) VALUES (1, 'A', 1), (1, 'B', 1), (2, 'C', 1), (3, 'C', 1)
    
    SELECT * FROM #TableA;
    SELECT * FROM #TableB;
    
    DECLARE @pks AS TABLE 
    (
        PK_A INT,
        PK_B INT
    )
    
    INSERT INTO @pks (PK_A, PK_B)
    SELECT PK_A, PK_B 
    FROM #TableA INNER JOIN #TableB
    ON #TableA.Field1 = #TableB.Field1
        AND #TableA.Field2 = #TableB.Field2
        AND #TableA.Field3 = #TableB.Field3
    
    DELETE FROM #TableA WHERE PK_A IN (SELECT PK_A FROM @pks)
    DELETE FROM #TableB WHERE PK_B IN (SELECT PK_B FROM @pks)
    
    SELECT * FROM #TableA;
    SELECT * FROM #TableB;
    
    DROP TABLE #TableA;
    DROP TABLE #TableB;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 2016-04-02
      • 2023-01-21
      • 2019-08-14
      • 2021-07-09
      相关资源
      最近更新 更多