0
votes

Joindre interne SQL avec entrées vierges

En supposant que j'ai deux tables

Table de machine xxx

table calendrier xxx

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. xxx

résultat attendu: xxx

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.


1 commentaires

Pouvez-vous s'il vous plaît ajouter des exemples de données?


3 Réponses :


0
votes

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';


2 commentaires

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.



1
votes
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';

0 commentaires

0
votes

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';


0 commentaires