Sorun GİBİ için: şeklinde olabilir Yukarıdaki sorgu STR1 olarakSQL: Feeding SEÇ çıkış
select STR1 from T1 where STR2 = 'NAME1'
{ABC, ABC_1, ABC_2, ..., MNO, XYZ, XYZ_1 ...}.
Yani Şimdi önce bir kısmını içeren tüm bu eşleşen dizge1 ayıklamak istiyorumABC_1
MNO
XYZ
çıktı üretmesi aşağıdakilere sahip varsayalım _ #. Örneğin yukarıdaki örnek veri kümesi için beklenen çıktısı: dizge2'den hep STR1 başına tektir
ABC
ABC_1
ABC_2
MNO
XYZ
XYZ_1
Not.
SELECT
STR1
FROM
T1
WHERE
STR1
LIKE '% (truncate_underscore_part(select STR1 from T1 where STR2 = 'NAME1')) %'
herhangi bir fikir:
Kod akıllıca aşağıdaki gibi bir şey hayal?
İlk çözüm: Bir iç birleşim ile bunu yapmak
select t1.str1
from (
select case when instr(str1, '_') > 0
then substr(str1, 1, instr(str1, '_') - 1)
else str1
end prefix
from t1 where str2 = 'NAME1'
) prefix_list,
t1
where t1.str1 like prefix || '%'
Eğer Oracle kullanarak, yoksa mySql kullanırdınız? –
İlk sorgudaki çıktının örneğiniz yalnızca alt çizgilerini içermeyen öğeleri gösterir, ancak açıklamanızdan, ilk listenin 'ABC_1' vb. Içerebileceğini ve _ # bölümünü kesmek istediğinizi anlıyor musunuz? eşleşen ile devam etmeden önce dize? –
Bu neden hem Oracle hem de MySQL olarak etiketlendi ??? – MatBailie