У меня есть две таблицы, PERSON и ДРУЗЬЯ. ДРУЗЬЯ имеет поля NAME и FURNAME.SQL Query JOIN или IN оператор?
У человека есть N друзей.
Я хочу получить всех ЧЕЛОВЕК, у которых есть по крайней мере два ДРУГА, один с именем = «отметка», а другой с именем = «rocco» и фамилия = «siffredi».
Пример: если у меня есть человек, у которого есть 5 друзей, один из них называется меткой, и никто не называется rocco siffredi, таблицы не возвращаются.
Я думал о:
SELECT * FROM person p
JOIN friends AS f ON p.ID=f.personID
WHERE f.name ="mark" AND f IN
(SELECT * from FRIENDS WHERE name="rocco" and surname="siffredi")
или
SELECT * FROM person p
JOIN friends AS f1 ON p.ID=f1.personID
JOIN friends AS f2 ON p.ID=f2.personID
WHERE f1.name="mark" AND f2.name="rocco" AND f2.surname="siffredi"
Что является лучшим способом? Я имею в виду самый быстрый способ его выполнения. Меня не интересует читаемость. Есть ли другой способ выполнить этот запрос? Ty.
EDIT: добавлен присоединиться на ID ...
Что означает «лучший»? Для удобочитаемости я бы использовал 'WHERE EXISTS (... name =" mark ") И EXISTS (... name. =" Rocco "AND surname =" siffredi ")'. – adrianm
FK должен быть наоборот. Если FK находится на таблице «Человек», каждый человек может иметь только одного друга. –
Отредактировано FK. отредактировал предназначенный "лучший" – Gaetano