Mysql – Aynı tabloda JOIN benzeri bir ek sorgu
Ceviz.net'te şöyle bir soru sormuştum:
Resimdeki tablo için şunu sorgulamak istiyorum:
* İlk şahıs, son şahısla bağlantı kurmuş mu? (örn: where ilk_sahis='1' için ... )
* Son şahıs bu bağlantıyı AYNEN onaylamış mı? ( ilk_sahis = 1 için resimdeki 2.satırı sorgulayacağım)
* Bu iki şart; tip=onay ve netice = evet olmak ZORUNDA.Bunu php ile while döngüsü içerisinde 2.bir mysql sorgusu kullanarak yapmak kolay ama sadece mysql sorgusu ile bitirebilirsem daha iyi olacak gibi. Çünkü şahıs satırı ve karşılık (doğrulama) satırı sayısı oldukça fazla.
Biraz araştırma yapınca MySQL için Subquery diye bir hadise olduğunu ve exists komutu ile birleştirildiğinde tek tablo üzerinden güzel sorgular çıkarılabildiğini gördüm.
... Aynı tablo içinde ikinci bir sorgu çalıştırma işlemine subquery deniliyormuş. Biz dermanı Left/Right/Inner Join'lerde ararken select içinde select kullanarak sorun çözülüyormuş. Aşağıdaki şekilde sorgu olumlu netice verdi
Exists komutu kullanılarak ve tablo isimleri ile arada bir boşluk bırakarak "bir" ve "iki" diye ayrı isimler verildi. Böylece AS gibi bir şey çıktı ortaya...
select from sozlesme bir where exists (
select null from sozlesme iki where bir.ilk_sahis = iki.son_sahis
and iki.tip='onay' and iki.netice ='evet' and iki.ilk_sahis=bir.son_sahis)
and bir.tip='onay' and bir.netice ='evet' and bir.ilk_sahis='1'
şeklinde de kendi kendime cevap vermiş oldum
Tek tabloda çapraz sorgu ne işe yarar diye düşünenler olabilir. Nitekim benim de aklıma gelmezdi gerekli olabileceği. Ama oluyormuş işte
