1
votes

tables de jointure conditionnelle dans mysql

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


0 commentaires

3 Réponses :


1
votes

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


0 commentaires

2
votes

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;


0 commentaires

1
votes

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


0 commentaires