我有一张像
这样的表格+ ----------------------- +
| RowID | FromCol | toCol |
+ ----------------------- +
| 1 | a | b |
| 2 | b | c |
| 3 | c | d |
| 4 | c | b |
| 5 | b | a |
+ ----------------------- +
我想删除包含FromCol的行 - > ToCol与ToCol相同的值 - > FromCol 例如。 RowID 1是 - > b,RowID 5有b - > a所以rowID 5应该被删除。同样,RowID 4应该被删除,因为它有一个像RowID 2这样的交换值。
我的预期结果表是:
+ ----------------------- +
| RowID | FromCol | toCol |
+ ----------------------- +
| 1 | a | b |
| 2 | b | c |
| 3 | c | d |
+ ----------------------- +
我希望将此作为一个视图,最好使用CTE而不是使用SQL CURSOR。 请有人帮帮我。 感谢
答案 0 :(得分:0)
这是在MySQL中实现它的一种方法,我不确定相同的语法是否适用于其他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
答案 1 :(得分: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
答案 2 :(得分: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
)
答案 3 :(得分:0)
您可以使用如下所示的非常简单的 SQL:
SELECT RowID, FromCol, toCol
from my_table
where FromCol > toCol
如果您的列有字符串,那么您可以使用一个简单的散列函数来获取针对它们的整数,然后对它们进行比较。