i have a table named 'language' as shown below
personid | lang
-------------------
1 | english
1 | french
1 | italian
2 | italian
3 | french
3 | italian
4 | japanese
I wish to select all personid's with any of the language that personid 1 know. (That is, any personid which have values english, french or italaian)
I have used the following query and got the solution. But it seems little bit slower. (I think it's due to 'IN' clause). Is there any other query option for faster execution.
SELECT distinct personid FROM language WHERE personid!=1 AND lang IN (SELECT lang FROM language WHERE personid=1)
The following recommendations will help you in your SQL tuning process.
You'll find 3 sections below:
ALTER TABLE `language` ADD INDEX `language_idx_personid` (`personid`);
ALTER TABLE `language` ADD INDEX `language_idx_lang_personid` (`lang`,`personid`);
SELECT
DISTINCT language.personid
FROM
language
WHERE
language.personid != 1
AND EXISTS (
SELECT
1
FROM
language AS language1
WHERE
(
language1.personid = 1
)
AND (
language.lang = language1.lang
)
)