这必须是一个简单的问题,现在只是脑力不足......
我有一张名为'foo'的桌子。它有两列,'id'和'username'。
id是唯一的,但是一些用户名引用同一个用户;只有一个在'xx _'的用户名上有一个前缀。
ex:
ID USERNAME
1 bob
2 sam
3 xx_bob
如何确定哪些用户与'xx_'前缀对应?然后哪些不是?
答案 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_%'