Rejoindre différentes tables en fonction de la valeur de la colonne

J'ai une table appelée notifications:

CREATE TABLE `notifications` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL,
  `type` varchar(20) NOT NULL DEFAULT '',
  `parent_id` int(11) DEFAULT NULL,
  `parent_type` varchar(15) DEFAULT NULL,
  `type_id` int(11) DEFAULT NULL,
  `etc` NULL
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=25 DEFAULT CHARSET=utf8;

Chaque notification est liée à une autre table, la valeur de parent_type champ spécifie le nom de la table que je veux * join la table avec. Toutes les tables ont plusieurs colonnes similaires:

CREATE TABLE `tablename` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `is_visible` tinyint(1) NOT NULL,      
  `etc` NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

Actuellement, je suis en utilisant cette requête pour sélectionner les notifcations que leur ligne dans la table cible existe et de leur is_visible champ est 1:

SELECT n.id, 
FROM notifications n 
LEFT JOIN books b ON n.parent_id = b.id AND n.parent_type = 'book' AND b.is_visible = 1
LEFT JOIN interviews i ON n.parent_id = i.id AND n.parent_type = 'interview' AND i.is_visible = 1
LEFT JOIN other tables...
WHERE n.user_id = 1
GROUP BY n.id

Mais puisque c'est un LEFT JOIN il renvoie la notification si elle correspond à une table ou pas, comment je peux le réécrire afin de ne pas retourner les notifications qui ne correspondent pas à une ligne dans la table cible? J'ai aussi essayé le CASE déclaration en vain.

source d'informationauteur undefined