[Linux-programlama] Re: sql in

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Volkan YAZICI (yazicivo@ttnet.net.tr)
Date: Mon 24 Apr 2006 - 08:44:33 GMT


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.

_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.