Select cümlesi
Select cümlesi
Dört tablomuz var;
URUN P, URUN_OZELLIK PP, UYE U,UYE_OZELLIK UO
P tablosunda URUN_NO alanı mevcut,
(P.URUN_NO, AD)
PP tablosunda P tablosundaki ürünlerin özellikleri tutuluyor (her bir ürün için 70 kadar özellik),
ve tabloda özelliğin var olup olmadığıyla ilgili bir
VAR alanı mevcut.
(PP.URUN_OZELLIK_NO,URUN_NO,OZELLIK_NO,VAR(bit))
U tablosunda UYE_NO(PK) var ve uye bilgileri tutuluyor
(U.UYE_NO,AD) -> bu tablo aslında önemli değil)
UO tablosunda ise UYE_NO(FK) ve OZELLIK_NO alanı var
eğer bu tabloda bir ozellik no geçmişse bu değerin
PP içinde geçiyor olması lazım.
(UO.UYE_OZELLIK_NO,UYE_NO,OZELLIK_NO)
Mesela sorgu şuki
Ben 2 nolu uyenin aradığı üründe mutlaka olmazsa olmaz dediği özellikleri (UO tablosundakiler) taşıyan (PP tablosu)
ürünleri listelemek istiyorum.
URUN P, URUN_OZELLIK PP, UYE U,UYE_OZELLIK UO
P tablosunda URUN_NO alanı mevcut,
(P.URUN_NO, AD)
PP tablosunda P tablosundaki ürünlerin özellikleri tutuluyor (her bir ürün için 70 kadar özellik),
ve tabloda özelliğin var olup olmadığıyla ilgili bir
VAR alanı mevcut.
(PP.URUN_OZELLIK_NO,URUN_NO,OZELLIK_NO,VAR(bit))
U tablosunda UYE_NO(PK) var ve uye bilgileri tutuluyor
(U.UYE_NO,AD) -> bu tablo aslında önemli değil)
UO tablosunda ise UYE_NO(FK) ve OZELLIK_NO alanı var
eğer bu tabloda bir ozellik no geçmişse bu değerin
PP içinde geçiyor olması lazım.
(UO.UYE_OZELLIK_NO,UYE_NO,OZELLIK_NO)
Mesela sorgu şuki
Ben 2 nolu uyenin aradığı üründe mutlaka olmazsa olmaz dediği özellikleri (UO tablosundakiler) taşıyan (PP tablosu)
ürünleri listelemek istiyorum.
Re: Select cümlesi
Kod: Tümünü seç
SELECT * FROM URUN
WHERE URUN_NO IN (SELECT URUN_NO FROM URUN_OZELLIK WHERE OZELLIK_NO IN (SELECT OZELLIK_NO FROM UYE_OZELLIK WHERE UYE_NO=2))

Ayriyeten şunu da ilave edeyim;
Mesela üyelerden bir tanesi hiç bir şart koşmamış olabilir ve bu sebeple
UO tablosunda bu uyeye ait kayıt olmayabilir, o zaman
bütün ürünleri listelemesi gerekiyor.
Halbuki
şeklinde ilişkilendirirseniz otomatik olarak hiç kayıt dönmez.
Mesela üyelerden bir tanesi hiç bir şart koşmamış olabilir ve bu sebeple
UO tablosunda bu uyeye ait kayıt olmayabilir, o zaman
bütün ürünleri listelemesi gerekiyor.
Halbuki
Kod: Tümünü seç
SELECT OZELLIK_NO FROM UYE_OZELLIK WHERE UYE_NO=2
Kod: Tümünü seç
select p.* from p, pp, u, uo
where 1 = 1 or (p.ukodu = pp.ukodu and
pp.ozellikno = uo.ozellikno and
uo.uyeno = u.uyeno)
Kod: Tümünü seç
SELECT * FROM "DBA"."URUN_OZELLIK" where OZELLIK_NO in (1,2,3) order by URUN_NO
oysa istediğimiz sadece bir nolu ürünün gözükmesi diğerlerinin düşmesiURUN_NO | OZELLIK_NO
1 1
1 2
1 3
2 3
5 3
8 3
10 3
11 3
22 2
Dönen kayıtlardan sadece 1 nolu ürün 1,2 ve 3 nolu özelliklere sahip
diğerleri ise bu özelliklerden sadece birine veya ikisine sahip bu nedenle onların listelenmemesi gerekiyor.
Zaten ilk mesajımda da olmazsa olmaz özellikler demiştim.
Pek içime sinmesede şu şekilde hazırladım baya bi ilke oldu ama;
diğerleri ise bu özelliklerden sadece birine veya ikisine sahip bu nedenle onların listelenmemesi gerekiyor.
Zaten ilk mesajımda da olmazsa olmaz özellikler demiştim.
Pek içime sinmesede şu şekilde hazırladım baya bi ilke oldu ama;
Kod: Tümünü seç
select l.URUN_NO from
(select count(OZELLIK_NO) as TOPLAM_OZELLIK from UYE_OZELLIK where UYE_NO = 2513)as P,
(select URUN_NO,isnull(m.TOPLAM,0)as TOPLAM from(
select URUN_NO,count(OO.OZELLIK_NO) as TOPLAM from URUN_OZELLIK OO, UYE_OZELLIK U
where U.UYE_NO = 2513 and
U.OZELLIK_NO = OO.OZELLIK_NO and OO.VAR_YOK = 1
group by URUN_NO
union select URUN_NO,NULL from URUN_OZELLIK group by URUN_NO) as m
) as l where l.TOPLAM = P.TOPLAM_OZELLIK