MySql FIND_IN_SET
MySql içinde IN sorgusuna alternatif olması amacıyla dâhili bir fonksiyondur. Performans ve çalışma şekli bakımından IN den çokta farklı değildir. Bir örnekle açıklamak gerekirse;
İlk önce aşağıdaki tabloları oluşturalım.
CREATE TABLE items(ItemId INT, ItemDescription VARCHAR(100));
CREATE TABLE sales(SalesId INT NOT NULL AUTO_INCREMENT KEY, ItemId INT, SalesDate DATETIME SalesAmount DECIMAL(12, 2));
INSERT INTO items(ItemId, ItemDescription) VALUES (1,’Television’);
INSERT INTO items(ItemId, ItemDescription) VALUES (2,’Mobile’);
INSERT INTO items(ItemId, ItemDescription) VALUES (3,’Laptop’);
INSERT INTO sales(ItemId, SalesDate, SalesAmount) VALUES (1,’2014-01-01′,1200);
INSERT INTO sales(ItemId, SalesDate, SalesAmount) VALUES (2,’2014-01-02′,200);
INSERT INTO sales(ItemId, SalesDate, SalesAmount) VALUES (3,’2014-01-09′,1700);
INSERT INTO sales(ItemId, SalesDate, SalesAmount) VALUES (3,’2014-01-29′,1700);
INSERT INTO sales(ItemId, SalesDate, SalesAmount) VALUES (3,’2014-02-11′,1700);
INSERT INTO sales(ItemId, SalesDate, SalesAmount) VALUES (1,’2014-02-16′,1200);
INSERT INTO sales(ItemId, SalesDate, SalesAmount) VALUES (2,’2014-02-16′,200);
INSERT INTO sales(ItemId, SalesDate, SalesAmount) VALUES (2,’2014-02-20′,200);
INSERT INTO sales(ItemId, SalesDate, SalesAmount) VALUES (2,’2014-02-20′,200);
INSERT INTO sales(ItemId, SalesDate, SalesAmount) VALUES (2,’2014-02-22′,200);
INSERT INTO sales(ItemId, SalesDate, SalesAmount) VALUES (3,’2014-02-24′,1700);
INSERT INTO sales(ItemId, SalesDate, SalesAmount) VALUES (1,’2014-02-24′,1200);
Diyelim ki satılan tüm Mobil ve Laptop kayıtlarını görmek istiyorsunuz IN ifadesini aşağıdaki gibi kullanabilirsiniz :
SELECT * FROM items NATURAL JOIN sales
WHERE ItemDescription IN (‘Mobile’,’Laptop’);
Aynı sonucu FIND_IN_SET fonksiyonunu kullanarak da elde edebilirsiniz.
SELECT * FROM items NATURAL JOIN sales
WHERE FIND_IN_SET (ItemDescription, ‘Mobile,Laptop’);
FIND_IN_SET fonksiyonu 2 parametre alır. 1. Kolonun adıdır, 2.si ise virgül ile ayrılmış kolon içindeki değerlerdir.
Yukarıdaki 2 ifade de aynı sonucu döner.
Teknik olarak hangi yöntemi izlediğimiz pekte önemli değildir. 2 yöntem sadece birbirinin alternatifidir.