Ma requête en violon est la suivante.
select * from notification where status = 0 and ( notif_id in (select notif_id from notif_user where user_id = 1) OR notif_id in (select notif_id from notif_group where group_id = 1))
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=cad284e77218eb37461e60b6308bf85f
Les requêtes fonctionnent comme prévu. Mais y aura-t-il des problèmes de performances avec la requête. Est-il possible de convertir une requête interne en jointure ?
Votre sous-requête n'est pas dépendante d'une sous-requête, mais indépendante. Autrement dit, ils ne font pas référence aux colonnes de votre table
notification
, mais uniquement aux colonnes de leur propre table.Donc, pas de problèmes de performances ici.
Vous pouvez exprimer les sous-requêtes sous forme de requêtes syndicales et comparer les statistiques du plan d'exécution. En regardant le résultat dans fiddle, union semble fonctionner légèrement mieux.
Une autre façon de l'exprimer est d'utiliser existe