2013-08-21 14 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) 

迪特

相關問題