2014-01-12 44 views
1

我遇到的問題在於比較兩個表,並返回兩個表中都不具有的結果。我正在使用基於劇院的預訂和座位號。比較兩個表並返回不在mysql中出現的答案

所以我的第一張桌子是座位表看起來像這樣。

row_no  area_name 
a01  front stalls 
a02  front stalls 

有幾個區域名稱可以使用,但它們都使用與上述相同的格式。在這個例子中,我只會在前檔位中使用座位a01至a20。

第二個表是預訂表看起來像這樣

ticket_no row_no date_time  customer_name 
001070714 a01  21:00 7.7.14 John Doe 
002070714 a02  21:00 7.7.14 John Doe 

我想實現是比較在那個特定欣欣預訂座位從座位席總榜單列表表,則組的結果由AREA_NAME所以我希望acheive結果等

area_name  row_no 
front stalls 18 

其中18將是從在座椅表中描述的完整集合20的自由席位數。

我將如何着手實現這個答案?

編輯 這是我到目前爲止已經試過

SELECT 
DISTINCT s.area_name, row_no 
FROM seat AS s 
FROM booking AS b 
COUNT * WHERE s.row_no != b.row_no 
WHERE b.title = rammstein 
WHERE s.area_name = 'front stalls' 
GROUP BY s.area_name; 
+0

什麼你嘗試這麼遠嗎?其中一個相似的主題 –

+0

反覆幾次, 'SELECT DISTINCT s.area_name,s.row_no 從一個座位爲a,預定爲B, COUNT * WHERE s.row_no!= b.row_no WHERE b.date_time =' 21:00,7.7.14' where s.area_name ='front stalls';' 是我最後使用的。 –

+0

你最後一次嘗試得到了什麼? –

回答

0

試着這麼做:

SELECT seat_q.area_name, (seat_q.num_seats - COUNT(*) AS occupied_seats) AS free_seats 
FROM booking b 
WHERE row_no IN (
    SELECT s.row_no 
    FROM seat s 
    WHERE s.area_name = 'front stalls' 
    GROUP BY s.area_name) 
JOIN 
(SELECT s.row_no, s.area_name, COUNT(s.*) AS num_seats 
FROM seat s 
WHERE s.area_name = 'front stalls' 
GROUP BY s.area_name) AS seat_q 
ON seat_q.row_no = b.row_no 
WHERE b.date_time = '21:00, 7.7.14' 
+0

我試過了,但是我在 ''*) - COUNT(b。*)附近得到了一個不正常的語法錯誤)AS free_seats FROM seat s JOIN booking b ON s.row_no = b.row_no'at line 1' I我不確定這個錯誤是否用alias命令或'From seat s'命令引用到該行。 –

+0

我剛剛改變了我的答案。 –