MySql FIND_IN_SET

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.

 

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir