我有一个带有用户数字的Oracle数据库。像:SQL选择它是否有2个名称
Prename ID
------- -------
Tom u2300
Tom xu2300
Julian ue2301
Anet xue2302
我会找到具有相同ID “UNumber当前”/ “uenumber” 与 “xnumber”/ “xuenumber” 的所有用户。 他们必须都存在。所有只有u/uenumber或xu/xue的用户都可以。
我需要查询帮助。 非常感谢。
我有一个带有用户数字的Oracle数据库。像:SQL选择它是否有2个名称
Prename ID
------- -------
Tom u2300
Tom xu2300
Julian ue2301
Anet xue2302
我会找到具有相同ID “UNumber当前”/ “uenumber” 与 “xnumber”/ “xuenumber” 的所有用户。 他们必须都存在。所有只有u/uenumber或xu/xue的用户都可以。
我需要查询帮助。 非常感谢。
你在找这样的事吗?
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
只是为了寻找名字?或者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)
迪特
这是一个有点混乱。你能举出更多的例子,并指出你的情况,他们匹配或不匹配? – eatonphil
大概想把它分成两列:'type'和'number'。然后'2300','xu,2300','ue,2301','xue,2302'。否则你正在查看字符串解析。 –
你有模式控制吗?可能更容易有两列:前缀,ID和计算列ID =前缀+ ID。这会让你更容易理解很多逻辑。 – mrtig