比较同一个表中相同列的值

时间:2009-06-12 21:23:02

标签: mysql select

这必须是一个简单的问题,现在只是脑力不足......

我有一张名为'foo'的桌子。它有两列,'id'和'username'。

id是唯一的,但是一些用户名引用同一个用户;只有一个在'xx _'的用户名上有一个前缀。

ex:
ID      USERNAME
1       bob
2       sam
3       xx_bob

如何确定哪些用户与'xx_'前缀对应?然后哪些不是?

3 个答案:

答案 0 :(得分:2)

select * from foo where username 
 IN (select replace(username, 'xx_', '') from foo where username like 'xx_%')

这样做是将整个表与IN动词后的子查询生成的子列表进行比较。

相反,您只需使用NOT IN代替IN。

注意:这是一个t-sql(MS SQL 2005)查询,在MySQL中应该类似

答案 1 :(得分:1)

这将为您提供两行的ID:

select * from foo a1 join foo a2 on (a2.username=concat('xx_',a1.username));

答案 2 :(得分:0)

如果您希望每个行都不重复,请使用duplicate_id:

SELECT foo.*, f2.id AS duplicate_id FORM foo
LEFT OUTER JOIN foo AS f2 ON ( f2.username = concat( 'xx_', foo.username ) )
WHERE foo.id NOT LIKE 'xx_%'