J'ai deux tables. Je veux une liste de toutes les activités autorisées et non autorisées pour guest_id 1 à partir de ces tables.
première table
select * from table_activity_name left join table_allowed_activity on activity_name_id = allowed_activity_name_id where allowed_activity_guest_id = 1;
deuxième table
activity_name_id | activity_name |allowed_guest_id | allowed_activity_name_id | 1 Entry 1 1 2 Exit null 2 3 Break 1 3
3 Réponses :
mettez votre condition allowed_activity_guest_id = 1
dans la clause ON
au lieu de where
select * from table_activity_name left join table_allowed_activity on activity_name_id = allowed_activity_name_id and allowed_activity_guest_id = 1
Essayez cette opération
select ta.activity_name_id, ta.activity_name, tal.allowed_guest_id, tal.allowed_activity_name_id from table_activity_name as ta left join table_allowed_activity as tal on ta.activity_name_id = tal.allowed_activity_name_id and tal.allowed_activity_guest_id in (1,2);
ou IN
select ta.activity_name_id, ta.activity_name, tal.allowed_guest_id, tal.allowed_activity_name_id from table_activity_name as ta left join table_allowed_activity as tal on ta.activity_name_id = tal.allowed_activity_name_id and tal.allowed_activity_guest_id = 1;
Si vous voulez qu'une condition soit appliquée à une colonne de table de jointure gauche, vous devez définir cette condition dans la clause ON de la table jointe gauche associée
select * from table_activity_name left join table_allowed_activity on activity_name_id = allowed_activity_name_id AND allowed__guest_id = 1;
Si vous utilisez où pour ces conditions la requête fonctionne comme jointure interne