2016-01-02 193 views
2

我需要如下所述生成表。我有这些样本,但它不起作用。任何请帮助。SQL查询计数选择

 
SELECT id, room, bed, 
bed -(SELECT count(bed) FROM tb_student WHERE room_id = id) as FREE 
FROM tb_rooms 

tb_rooms 
+----+-------+-----+ 
| ID | ROOM | BED | 
+----+-------+-----+ 
| 1 | A111 | 4 | 
| 2 | A112 | 2 | 
| 3 | A113 | 2 | 
| 4 | A114 | 2 | 
+----+-------+-----+ 

tb_student 
+----+---------+----------+ 
| ID | STUD_ID | ROOM_ID | 
+----+---------+----------+ 
| 1 | 211 | 3  | 
| 2 | 212 | 1  | 
| 3 | 213 | 1  | 
| 4 | 214 | 2  | 
+----+----------+---------+ 

I need something like this... 
+----+-------+------+-----+ 
| ID | ROOM | BED |FREE | 
+----+-------+------+-----+ 
| 1 | A111 | 4 | 2 | 
| 2 | A112 | 2 | 1 | 
| 3 | A113 | 2 | 1 | 
| 4 | A114 | 2 | 2 | 
+----+-------+------+-----+ 

+0

你目前收到了什么结果? –

+0

我从tb_students全部所有房间中扣除。 –

回答

1

试试这个

SELECT id as id, room as room, bed as bed, 
bed -(SELECT count(Room_ID) FROM tb_student where room_id = soh.id) as FREE 
FROM tb_rooms soh 

好运

+0

谢谢Soheil Karami ...但它不起作用。 –

+0

tb_student中的theres no(bed)列。它说未知的专栏。 –

+0

哦,对不起,我已经意识到,等我解决这个问题 –

0

John:您好您的查询权仅创建表的别名 在这里看到您的查询:

SELECT id as id, room as room, bed as bed, 
bed -(SELECT count(*) FROM tb_student where room_id = tr.id) as FREE 
FROM tb_rooms tr 
0

你可以试试这个:

SELECT 
    r.ID, 
    r.ROOM, 
    r.BED, 
    r.BED - COUNT(DISTINCT s.ID) AS FREE 
FROM tb_rooms AS r 
    LEFT JOIN tb_student AS s ON r.ID = s.ROOM_ID 
GROUP BY r.ID, r.ROOM, r.BED 

这是SQLFIDDLE

+0

谢谢你Guyz! –