2017-06-09 187 views
-1

我有代碼的表像SQL JOIN表select語句

0100 ABC 
0100 ASD 
9010 ABC 
5555 ABC 

我想創建select語句,這會帶給我兩列像​​

calumn A (all the codes starting with 0100), column B (all the codes that after the first 4 chars, have the same ending with column A) 

例如

0100 ABC, 9010 ABC 
0100 ABC, 5555 ABC 
0100 ASD, null 

我在想像

select mtr.code, mtr1.code 
from material mtr 
where mtr.code like (%+ 

select distinct substring(mtr.code,5, len(mtr.code)) code 
from material mtr1 

) 

但它當然不起作用。有任何想法嗎?

+0

是0100單個列的值,還是0100 ABC是列的值?你可以分享一下餐桌設計嗎? –

+0

LIKE子查詢不能返回超過1個值,看起來像它可能會返回更多,因爲您正在使用DISTINCT – PawelCz

+0

表材料只有一個列字符串,所以0100 ABC和其他任何東西都是該表中的單個值 – SDAGLAS

回答

1

我認爲你在尋找這樣的事情:

select m1.code, m2.code 
from material m1 
left outer join material m2 
    on substring(m1.code from 5) = substring(m2.code from 5) 
    and m1.id <> m2.id 
where m1.code like '0100%' 

我們使用left outer joinmaterial得到所有行,甚至誰沒有雙胞胎的人。我們的連接條件是兩個code值在前4個字符後必須相同。該代碼還假定有一個id列;它被用來避免自己加入一行。

另一方面,如果code是您的主鍵,則應該使用m1.code <> m2.code來代替。

+0

工作起來就像一個魅力..謝謝 – SDAGLAS