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