如何从 SQL 表中删除相反的行

发布于 2024-08-24 00:04:42 字数 182 浏览 11 评论 0原文

我有以下 SQL 表:

A|B
---
w|x
x|w
y|z
z|y

我可以构造一个将产生以下结果的查询吗:

A|B
---
w|x
y|z

总而言之,我想将这两列视为无序集,例如 (a,b) == (b,a)。

I have the following SQL table:

A|B
---
w|x
x|w
y|z
z|y

Can I construct a query which will yield the following result:

A|B
---
w|x
y|z

To summarize, I would like to treat the two columns as an unordered set, such that (a,b) == (b,a).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

捎一片雪花 2024-08-31 00:04:42

“最佳”代码取决于数据库,但以下代码与 dbms 无关:

SELECT      t.A,
            t.B
FROM        my_table t
LEFT JOIN   my_table t2
        ON  t.A = t2.B
        AND t.B = t2.A
        AND t.A < t.B
WHERE       t2.A IS NULL

The "best" code depends on the database, but following is dbms-agnostic:

SELECT      t.A,
            t.B
FROM        my_table t
LEFT JOIN   my_table t2
        ON  t.A = t2.B
        AND t.B = t2.A
        AND t.A < t.B
WHERE       t2.A IS NULL
紫南 2024-08-31 00:04:42

您可以尝试以下操作:

SELECT LEAST(a,b) a, GREATEST(a,b) b
FROM t
GROUP BY LEAST(a,b), GREATEST(a,b)

使用以下测试表t

CREATE TABLE t ( a VARCHAR(1), b VARCHAR(1) );

INSERT INTO t VALUES ('w','x'),('x','w'),('y','z'),('z','y');

它返回:

w  x
y  z

使用LEASTGREATEST还确保w x返回 而不是 x w

You could try the following:

SELECT LEAST(a,b) a, GREATEST(a,b) b
FROM t
GROUP BY LEAST(a,b), GREATEST(a,b)

With the following test-table t:

CREATE TABLE t ( a VARCHAR(1), b VARCHAR(1) );

INSERT INTO t VALUES ('w','x'),('x','w'),('y','z'),('z','y');

it returns:

w  x
y  z

Using LEAST and GREATEST also makes sure that w x is returned instead of x w.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文