在两个不同的列中交替使用相同的值从两行中删除一行

gajydyqb  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(379)

查询如下:

select g1.gen_id as 'gen_1', g2.gen_id as 'gen_2', count(*) as 'count'
from gen g1, gen g2, dir d
where g1.gen_id <> g2.gen_id
[other irrelevant where conditions here]
order by g1.gen_id, g2.gen_id;

输出变为:


# gen_1, gen_2, count

'32', '34', '5'
'34', '32', '5'
'32', '39', '2'
'32', '40', '2'
'32', '42', '1'
'32', '43', '3'
'39', '32', '2'
'43', '32', '3'
'32', '45', '4'
'32', '48', '1'
'40', '32', '2'

如您所见,这是因为我得到了同一个表的笛卡尔积(我在 from 第二条)。如果您注意到在输出中,我在两列中交替使用了值(前两列-第三列在这里不相关)。我想要的是删除其中每一个重复的一行。我没有粘贴整个输出,但请放心这就是发生的事情。我有442行输出时,他们应该是221。我想删除“重复”行。有没有办法,因为我现在找不到办法。

oxcyiej7

oxcyiej71#

使用

where g1.gen_id > g2.gen_id

where g1.gen_id < g2.gen_id

.

8yoxcaq7

8yoxcaq72#

解决方法是使用 < . 不过,我会对查询进行一些其他更改:

select g1.gen_id as gen_1, g2.gen_id as gen_2, count(*) as cnt
from gen g1 join
     gen g2, dir d
     on g1.gen_id < g2.gen_id
where [other irrelevant where conditions here]
order by g1.gen_id, g2.gen_id;

首先,它使用显式 join 语法。虽然不是必须的, JOIN 做得比 , 表达你想要完成的事情。
其次,它删除列名周围的单引号。仅对字符串和日期常量使用单引号。否则,当列别名被解释为字符串时,代码可能会中断。

相关问题