gpt4 book ai didi

MYSQL - 删除可以以相反顺序出现在两列中的值

转载 作者:行者123 更新时间:2023-11-29 14:52:44 27 4
gpt4 key购买 nike

我有 2 列,name1 和 name2,其中包含许多行可能的名称。

例如:约翰公民、简纳税人、公民约翰、纳税人简等等...

一个部分名称存储在 name1 下,另一个部分名称存储在 name2 下。我想知道如何删除表中出现的所有名称,以便每个可能的名称只有一个条目?例如,John Citizen 或 Citizen John 会存在,但不会同时存在。所以最后我会得到:

John Citizen
Jane Taxpayer

或者...

John Citizen
Taxpayer Jane

或者...

Citizen John
Taxpayer Jane

或者...

Citizen John
Jane Taxpayer

编辑:只是为了澄清,例如 name1 = John,name2 = Citizen。它们已经被分成各自的列,所以我只需要在两列之间选择独特的组合。

最佳答案

好的,重写整个内容。给定一个表n:

create table n(f varchar(10), l varchar(10), primary key(f,l));

包含以下 10 行:

'alfred', 'hitchcock'
'hitchcock', 'alfred'
'john', 'doe'
'doe', 'john'
'edward', 'scissorhan'
'felix', 'leclerc'
'lane', 'penny'
'penny', 'lane'

此查询将仅返回没有反转的名称:

SELECT u1.f, u1.l
FROM n u1
LEFT JOIN n u2
ON (u1.f=u2.l AND u1.l=u2.f)
WHERE u2.f IS NULL and u2.l IS NULL;

'edward', 'scissorhan'
'felix', 'leclerc'

此查询将仅返回具有反转的名称(以及反转):

SELECT u1.f, u1.l
FROM n u1 JOIN n u2
ON (u1.f=u2.l AND u1.l=u2.f);

'alfred', 'hitchcock'
'doe', 'john'
'hitchcock', 'alfred'
'john', 'doe'
'lane', 'penny'
'penny', 'lane'

因此我们需要使用的集合是由上面的查询创建的。如果我们决定只需要 u1.f < u2.f 的行,那么我们就有一个过滤器可以为我们提供唯一的集合:

SELECT u1.f,  u1.l
FROM n u1
JOIN n u2
ON (u1.f=u2.l AND u1.l=u2.f)
WHERE u1.f<=u2.f;

关于MYSQL - 删除可以以相反顺序出现在两列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5405028/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com