[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-programlama
Subject:    [Linux-programlama] Re: sql in
From:       yazicivo () ttnet ! net ! tr (Volkan YAZICI)
Date:       2006-04-24 11:47:30
Message-ID: 20060424084433.GA259 () alamut
[Download RAW message or body]

On Sat, 22 Apr 2006 "Serdar Ceyhun" wrote:
> Sql'deki IN ile aşağıdaki gibi bir problemim var.
> 
> SELECT * FROM enquiry_courses WHERE enquiry_id IN (  SELECT enquiry_id
> FROM enquiries WHERE session_id =  '4cd3420a16dbd61c6af58f6199ac00f1'
> )
> 
> Myslq says: You have an error in your SQL syntax near 'SELECT
> enquiry_id FROM enquiries WHERE session_id = 
> '4cd3420a16dbd61c6af58f6199'

Yine subquery desteklemeyen enterprise-compliant bir veritabanı ile
karşı karşıyayız.

Yukarıdaki sorguyu şu türevleri ile değiştirebilirsiniz. (MySQL bunları
destekler mi bilmem ama.)

SELECT T1.*
  FROM enquiry_courses AS T1
  WHERE EXISTS (SELECT 1 FROM enquiries AS T2
                  WHERE T2.session_id =  '4cd3420a16dbd61c6af58f6199ac00f1'
                  AND T2.enquiry_id = T1.enquiry_id);

SELECT T1.*
  FROM enquiry_courses AS T1
  INNER JOIN enquiries AS T2 ON (T2.session_id = '4cd3420a16dbd61c6af58f6199ac00f1' AND
                                 T2.enquiry_id = T1.enquiry_id);

Muhtemelen 2. sorgu daha hızlı çalışacaktır; fakat bu, verinin dağılımına
ve kullandığınız DBMS'in planner'ının yapacağı seçim ve uygulamaya göre
farklılık gösterebilir - bunu söylerken her iki yöntem içinde doğru
INDEX'leri oluşturduğunuzu varsayıyorum.


İyi çalışmalar.

P.S. Unutmadan, her iki yöntemi de denemeden doğrudan yazdım.

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic