2013-08-21 15 views
0

我有一个带有用户数字的Oracle数据库。像:SQL选择它是否有2个名称

Prename ID 
------- ------- 
Tom  u2300 
Tom  xu2300 
Julian  ue2301 
Anet  xue2302 

我会找到具有相同ID “UNumber当前”/ “uenumber” 与 “xnumber”/ “xuenumber” 的所有用户。 他们必须都存在。所有只有u/uenumber或xu/xue的用户都可以。

我需要查询帮助。 非常感谢。

+2

这是一个有点混乱。你能举出更多的例子,并指出你的情况,他们匹配或不匹配? – eatonphil

+1

大概想把它分成两列:'type'和'number'。然后'2300','xu,2300','ue,2301','xue,2302'。否则你正在查看字符串解析。 –

+0

你有模式控制吗?可能更容易有两列:前缀,ID和计算列ID =前缀+ ID。这会让你更容易理解很多逻辑。 – mrtig

回答

0

你在找这样的事吗?

PRENAME ID  ID2 
Anet xue2302 null 
Julian ue2301 null 
Tom  u2300 xu2300 

如果是的话,这是查询:

SELECT u1."Prename", u1.ID as ID, u2.ID as ID2 
FROM users u1 
LEFT OUTER JOIN users u2 ON u2.ID = concat('x',u1.ID) 
WHERE u1.ID LIKE 'u%' 
UNION 
SELECT u1."Prename", u1.ID as ID, u2.ID as ID2 
FROM users u1 
LEFT OUTER JOIN users u2 ON u2.ID = replace(u1.ID,'x') 
WHERE u1.ID LIKE 'x%' AND u2.ID is null 

见SQLFIDDLE:http://www.sqlfiddle.com/#!4/81bb1/13/0

0

只是为了寻找名字?或者ID也是?

SELECT "Prename" 
    ,MIN(CASE WHEN ID LIKE 'u%' THEN ID END) u_id 
FROM users 
GROUP BY "Prename" 
HAVING 
    MIN(CASE WHEN ID LIKE 'x%' THEN SUBSTR(ID,2) END) 
= MIN(CASE WHEN ID LIKE 'u%' THEN ID END) 

迪特

相关问题