我有一個帶有用戶數字的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