MySQL FIND_IN_SET ve IN deyimi

Posted by Zafer | Posted in MySQL | Posted on 27-09-2010

MySQL ‘ de in deyimi ile aşağıdaki örnekteki gibi bir sorun yaşanmakta

– Doğru sonucu veren örnek

select * from tabloAdı where alanAdı in (1,2,3,4,5);

– Bu sorgu ise sadece ilk kayıtı yani ’1′ e karşılık gelen sonucu göstermektedir.

declare @deger varchar(10);

set @deger=’1,2,3,4,5′;

select * from tabloAdı where alanAdı in (@deger);

– FIND_IN_SET deyimi ile ise bu sorunu çözebiliriz.

declare @deger varchar(10);

set @deger=’1,2,3,4,5′;

select * from tabloAdı where FIND_IN_SET (alanAdı,@deger);

“SQL Optimizer…” IN yerine EXISTS kullanımı

Posted by Zafer | Posted in SQL | Posted on 22-09-2008

Önerilmez

SELECT product_id, name FROM   products
WHERE  product_id IN ( SELECT product_id FROM   purchases )

Önerilir

SELECT product_id, name FROM   products pr
WHERE EXISTS ( SELECT 1 FROM   purchases pu WHERE   pu.product_id = pr.product_id )

IN bir listede aranan verinin olup olmadığını kontrol eder. EXISTS sadece kayıtların varlığını kontrol
ederken, IN ise gerçek verileri kontrol eder. Alt sorgularda EXISTS daha iyi sonuçlar verdiğinden tercih
edilmelidir.

Kaynak : SQL Tuning El Kitabı call 7/24