0

私は次のようなテーブルを持っています

+ ----------------------- +
| RowID | FromCol | toCol |
+ ----------------------- +
| 1     | a       | b     |
| 2     | b       | c     |
| 3     | c       | d     |
| 4     | c       | b     |
| 5     | b       | a     |
+ ----------------------- +

FromCol->ToColがToCol->FromColと同じ値を持つ行を削除したいと思います。RowID1はa->bであり、RowID5はb->aであるため、rowID5を削除する必要があります。同様に、RowID 4は、RowID 2のようにスワップされた値を持っているため、削除する必要があります。

私の期待する結果表は次のとおりです。

+ ----------------------- +
| RowID | FromCol | toCol |
+ ----------------------- +
| 1     | a       | b     |
| 2     | b       | c     |
| 3     | c       | d     |
+ ----------------------- +

これを、できればSQLCURSORを使用しないCTEでビューとして取得したいと思います。誰か助けてくれませんか。ありがとう

4

4 に答える 4

0

MySQL でそれを行う 1 つの方法を次に示します。同じ構文が他の SQL ダイアレクトで機能するかどうかはわかりません。

DELETE t1
FROM mytable t1
INNER JOIN mytable t2
WHERE t1.fromCol = t2.toCol
AND t1.toCol = t1.fromCol
AND t1.rowID > t2.rowID
于 2012-09-16T01:57:53.467 に答える
0

@Barmar と非常に似ていますが、インライン テーブルの代わりにサブクエリを使用します。

これはSQL Serverで機能します

select t1.*
FROM dbo.MyTest t1
WHERE (SELECT COUNT(t2.rowid) 
         FROM dbo.MyTest t2 
        WHERE t2.toCol= t1.fromCol
          AND t2.fromCol= t1.toCol
          AND t1.rowid> t2.rowid) = 0
于 2012-09-16T02:04:40.507 に答える
0

お試しください

Delete from table where rowid in (select  f.id from table f INNER JOIN table fo on fo.tocol = f.fromcol and f.tocol = fo.fromcol and f.id > fo.id
)
于 2012-09-16T10:35:54.713 に答える