0
votes

requête SQL pour sélectionner les enregistrements de MySQL

peut me suggérer la meilleure façon de sélectionner des enregistrements à partir de MySQL

customer
--------
id  bed_id  status
1   1       vocated     
2   1       booked
3   2       vocated

bed
-----
id  name
1   lower 
2   middle
3   upper


2 commentaires

Définir «meilleur» !! Et montrez-nous ce que vous avez essayé


Qu'est-ce que vous avez contre les sous-demandes?


4 Réponses :


0
votes

Essayez ceci- xxx

Remarque: Ce travail fonctionne pour vos données actuelles. Mais si je pense que je pense que vous devez vérifier le dernier statut d'un lit dans la table des clients. Ce cas vous devez fournir des données avec plus de variété et plus d'explication de votre besoin.


2 commentaires

Merci. Vous recherchez une requête avec rejoindre la table et ce n'est pas avec une sous-requête.


ID dans la table client est incrémentiel? Pour bed_id 1 Il y a 2 entrées avec ID 1 et 2. Est-ce vrai que le plus grand ID 2 détient le dernier statut de bed_id = 1



1
votes

Rejoignez les tableaux et le groupe par l'ID du lit et placez les conditions dans une clause: xxx

Je ne sais pas si vous avez besoin de et ou ou < code> ou dans les conditions


5 commentaires

Cette requête donne 1 et 2 comme "ID de lit"


Maintenant, il donne 2 et 3


Eh bien, après le changement :)


Merci @forpas. Je m'attendais à la même chose dans une seule requête


Il s'agit d'une jointure unique mais elle regroupe ensuite et agrégée pour vérifier les conditions.



0
votes

Vous pouvez appliquer une logique inverse par n'existe pas : xxx

Démo


0 commentaires

0
votes

Vous pouvez trouver le statut le plus récent en utilisant une sous-requête corrélée et une jointure gauche pour trouver des chambres qui n'ont jamais eu d'activité

 select group_concat(s.t1id) availablerooms 
    from
    (
    select t1.id t1id,t1.name,t.id,t.bed_id,t.status
    from t1
    left join t on t1.id = t.bed_id 
    where t.id = (select max(id) from t where t1.id = t.bed_id) or
            t.id is null
    ) s
    where s.status <> 'booked' or s.status is null;

+----------------+
| availablerooms |
+----------------+
| 2,3            |
+----------------+
1 row in set (0.00 sec)


0 commentaires