Sub query kurma
Sub query kurma
Arkadaşlar, benim INVOICE ve DOCTORS isimlı iki tablom var.
INVOICE
INVDATE(Invoice tarihi)
DRID(Doktorun IDsi)
ves....
DOCTORS
DRID(Doktorun IDsi)
DAYLIMIT(En fazla kaç gün ilaç yazmaya bilir)
DRNAME(İsmi)
Anlayacağınız gibi INVOICE.DRID=DOCTORS.DRID. Şimdi ben varsa hiç ilaç yazmayan (ki, bu zaman INVOICE tablosunda hiç ilaç tayin etmemiş doktorun IDsi olmayacak) ve en son ilaç tayin etdiği tarih GETDATE()-DAYLIMIT'ten küçük yada eşit olan doktorların ismini listelemek istiyorum.Bunun için ne yapmam gerek? Sub query kullanmaya gerek var mı?
INVOICE
INVDATE(Invoice tarihi)
DRID(Doktorun IDsi)
ves....
DOCTORS
DRID(Doktorun IDsi)
DAYLIMIT(En fazla kaç gün ilaç yazmaya bilir)
DRNAME(İsmi)
Anlayacağınız gibi INVOICE.DRID=DOCTORS.DRID. Şimdi ben varsa hiç ilaç yazmayan (ki, bu zaman INVOICE tablosunda hiç ilaç tayin etmemiş doktorun IDsi olmayacak) ve en son ilaç tayin etdiği tarih GETDATE()-DAYLIMIT'ten küçük yada eşit olan doktorların ismini listelemek istiyorum.Bunun için ne yapmam gerek? Sub query kullanmaya gerek var mı?
İstikrar sürsün, Türkiye'm büyüsün inşallah.
Re: Sub query kurma
SELECT * FROM DOCTORS
WHERE not EXISTS (SELECT * FROM INVOICE WHERE INVOICE.DRID=DOCTORS.DRID )
invoice tablosunda olmayan doctorlar.
WHERE not EXISTS (SELECT * FROM INVOICE WHERE INVOICE.DRID=DOCTORS.DRID )
invoice tablosunda olmayan doctorlar.
Bir kelimenin anlamını öğretsen bile yeter..



Re: Sub query kurma
Teşekkür ederim. Ama esas olan her iki koşulu sağlayan Query.Aslında Invoıce tablosunda olmayan doktorları başka bir yolla da alabiliyorum.Ama aynı zamanda da uzun zamandır Invoıce yazmamış olan doktorların da listesini çıkarmak istiyorum.
İstikrar sürsün, Türkiye'm büyüsün inşallah.
Re: Sub query kurma
Kod: Tümünü seç
SELECT doctors.*,invoice.* FROM DOCTORS LEFT JOIN invoice on doctors.drid=invoice.drid where invoice.invdate-getdate()>doctors.daylimit
Re: Sub query kurma
Ben yazıyorum:
Demek istediğim ben aynı anda 2 koşula uygun query çalıştırmak istiyorum. Ama mealen diyor ki, Where kısmında MAX kullanılamaz (bunu için HAVING clause ya da SUB Query kullanman lazım).Ben o yüzden bu sub query'yı nasıl kuracağımı soruyorumSELECT DR.DRNAME FROM DOCTORS DR LEFT JOIN INVOICE INV ON DR.DRID=INV.DRID WHERE (INV.DRID IS NULL) OR (MAX(INV.INVDATE)<=GETDATE()-DR.DAYLIMIT)
İstikrar sürsün, Türkiye'm büyüsün inşallah.
Re: Sub query kurma
Kod: Tümünü seç
SELECT doctors.DRNAME,MAX(inv.INVDATE) as Son_Kayit FROM INVOICE INV LEFT JOIN DOCTORS DR ON DR.DRID=INV.DRID having MAX(INV.INVDATE)<=(GETDATE()-DR.DAYLIMIT)
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: Sub query kurma
Kod: Tümünü seç
select * from DOCTORS as d
left join (select DRID, max(INVDATE) as INVDATE from INVOICE group by DRID) as i on i.DRID=d.DRID
where i.DRID is Null or (GetDate()-i.INVDATE>d.DAYLIMIT)
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Re: Sub query kurma
Hepinize teşekkürler, özellikle de sabanakman kardeşimize. Önerdiğiniz query'yle mesele hall oldu.
İstikrar sürsün, Türkiye'm büyüsün inşallah.