En supposant que j'ai deux tables
Table de machine p> table calendrier p> actuellement, la requête Que j'ai renvoyé uniquement les données qui répondent à la clause WHERE (qui doit être attendue), mais ce dont j'ai besoin, c'est de pouvoir obtenir toute la machine de la table de machine, y compris l'user_id du tableau de planification qui répond à la clause WHERE. p> résultat attendu: p> J'ai besoin de retourner toute la machine de la table de machine plus une colonne supplémentaire que contient l'user_id de la réservation qui répond à la date spécifiée. P> p>
3 Réponses :
Vous rejoignez les tables, déplacez où code> condition concernant les colonnes de table jointes à gauche sur sur code>. WITH Machines(id, ip_address) as (
values
(1, '1.1.1.1')
,(2, '1.1.1.2')
,(3, '1.1.1.3')
,(4, '1.1.1.4')
),Schedule(id, machine_id, reserved_date, user_id) as (
values
(1, 1, '2019-10-31', 1)
,(2, 2, '2019-10-10', 2)
,(3, 3, '2019-10-31', 4)
)
SELECT machines.ip_address, schedule.user_id
FROM machines
LEFT JOIN schedule ON schedule.machine_id = machines.id
AND schedule.reserved_date = '2019-10-31';
Merci pour la réponse, j'ai essayé votre solution, mais cela affiche uniquement le sous-ensemble de la machine entière.
Voir la réponse mise à jour avec les données d'échantillonnage, il renvoie toutes les machines, 4 lignes.
SELECT machine. ip_address, schedule. user_id FROM machine LEFT JOIN schedule ON schedule. machine_id = machine. machine_id WHERE schedule. reserved_date='2019-10-31';
Utilisez la jointe à gauche au lieu d'une jointure intérieure
SELECT machine.ip_address, schedule.user_id FROM machine LEFT JOIN schedule ON schedule.machine_id = machines_machine.id WHERE schedule.reserved_date = '2019-10-31';
Pouvez-vous s'il vous plaît ajouter des exemples de données?