2010-07-04 5 views
1

des problèmes avec un compte du nombre de clients qui n'ont pas embauché voituresUtiliser NOT IN et compter avec requête

create table customer 
(customer_id char(4) primary key not null, 
customer_sname varchar (30) not null, 
customer_fname varchar (30) not null, 
customer_title varchar (6) not null, 
customer_address1 varchar (35) not null, 
customer_address2 varchar (35) null, 
customer_postcode varchar (25) null, 
customer_phone varchar (30) null, 
customer_email varchar (40) null, 
customer_di varchar (40) not null) 
ENGINE=InnoDB; 

create table car_booking 
(booking_id INTEGER AUTO_INCREMENT primary key not null, 
car_id char (4) not null, 
customer_id char (4) not null, 
hire_sdate date not null, 
hire_edate date not null) 
engine=innodb; 

Cela ne semble pas fonctionner

SELECT customer_id count(*) 
FROM customer 
WHERE customer_id not IN 
(SELECT booking_id FROM car_booking 

aide-moi: - (

+0

Formater, s'il vous plaît. Utilisez la barre d'outils en haut de la zone d'édition. Sélectionnez chaque bloc de code et appuyez sur l'icône avec 1 et 0. –

+0

@sAc Merci beaucoup! –

+0

+1 pour l'affichage de la structure de votre table. Cela rend les choses beaucoup plus faciles. Vous auriez obtenu +2 si vous avez également expliqué * pourquoi * vous pensez que votre requête ne fonctionne pas et quel message d'erreur vous obtenez. Sauf StackOverflow ne me permet pas de voter +2. –

Répondre

0

Vous manque une virgule et GROUP BY clause, il devrait être:

SELECT customer_id, count(*) 
FROM customer 
WHERE customer_id not IN 
(SELECT booking_id FROM car_booking) 
GROUP BY customer_id 
2

Deux erreurs:

  • Votre instruction select ne doit pas inclure à la fois le nombre de clients et le nombre.
  • Votre sous-sélection sélectionnait l'ID de réservation au lieu de l'ID client.

Essayez ceci:

SELECT count(*) 
FROM customer 
WHERE customer_id NOT IN 
(SELECT customer_id FROM car_booking) 
2

Cela devrait également fonctionner. IMO c'est mieux qu'une sous-requête.

SELECT COUNT(*) 
FROM customer 
LEFT JOIN car_booking 
ON customer.customer_id = car_booking.customer_id 
WHERE car_booking.customer_id IS NULL 

Modifier: L'explication. LEFT JOIN apportera tous les enregistrements de la table client, même ceux qui n'ont pas d'enregistrement dans car_booking. Pendant ce temps, dans le jeu de résultats joint, car_booking.customer_id sera NULL pour toutes les entrées du client qui n'ont pas d'entrée dans car_booking. La clause WHERE spécifie uniquement ces lignes, qui COUNT (*) compte.

Questions connexes