2010-07-04 32 views
1

有問題的客戶數的計數誰沒有聘請汽車使用NOT IN與查詢計數

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; 

這似乎並不工作

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

幫助我: - (

+0

請格式化。使用編輯框頂部的工具欄。選擇每個代碼塊並用1和0按下圖標。 – 2010-07-04 12:22:13

+0

@sAc感謝一大堆! – 2010-07-04 12:22:56

+0

用於發佈您的表格結構。這使事情變得更容易。如果你還解釋了爲什麼*你認爲你的查詢不起作用以及你得到了什麼錯誤信息,你將得到+2。除了StackOverflow不允許我投票+2。 – 2010-07-04 12:32:23

回答

0

你缺少一個逗號和GROUP BY條款;它應該是:

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

兩個錯誤:

  • SELECT語句中不應該包括客戶編號和計數。
  • 您的子選擇是選擇預訂ID而不是客戶ID。

試試這個:

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

這也應該工作。 IMO比子查詢更好。

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

編輯:解釋。

LEFT JOIN將帶來表客戶的所有記錄,即使是那些在car_booking中沒有記錄的記錄。同時,在連接的結果集中,對於car_booking中沒有條目的客戶中的所有條目,car_booking.customer_id將爲NULL。 WHERE子句僅指定COUNT(*)計數的這些行。