Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从另一个表中添加列,但不影响计数()_Mysql_Sql_Count - Fatal编程技术网

Mysql 从另一个表中添加列,但不影响计数()

Mysql 从另一个表中添加列,但不影响计数(),mysql,sql,count,Mysql,Sql,Count,我已经有了一个多连接的查询,简单的预订列表 SELECT reservation.reservation_id, customer.customer_id, customer.name, count(ordered_services.reservation_id) AS num_of_ordered_services FROM reservations JOIN customers ON reservations.customer_id = customer.customer_id LEFT J

我已经有了一个多连接的查询,简单的预订列表

SELECT reservation.reservation_id, customer.customer_id, customer.name, count(ordered_services.reservation_id) AS num_of_ordered_services
FROM reservations
JOIN customers ON reservations.customer_id = customer.customer_id
LEFT JOIN ordered_services ON reservations.reservation_id = ordered_services.reservation_id
GROUP BY reservation.reservation_id, customer.customer_id, customer.name
ORDER BY reservation.reservation_id
reservation_id | customer_id |        added
     1         |  1909091202 | 2011-11-04 02:37:28
     2         |  2512541508 | 2011-11-04 14:27:01
输出类似于

reservation_id | customer_id | name | num_of_ordered_services
     1         |  1909091202 | John |          2 
     2         |  2512541508 | Jane |          3 
我想添加另一列,其中包含有关付款的信息,但简单联接、左联接会干扰现有的count()列。像

SELECT reservation.reservation_id, count(payments.reservation_id) AS num_of_payments
FROM reservations
LEFT JOIN payments ON reservations.reservation_id = payments.reservation_id
GROUP BY reservation.reservation_id
ORDER BY reservation.reservation_id

reservation_id | num_of_payments
     1         |       0 
     2         |       2
但在这两方面都有一个单一的结果。如何做到这一点

PS:num_of_payments不是必需的,我只需要知道是否存在对某些预订的付款(1,0)。 多谢各位


tbl结构,无特殊要求: 保留地

SELECT reservation.reservation_id, customer.customer_id, customer.name, count(ordered_services.reservation_id) AS num_of_ordered_services
FROM reservations
JOIN customers ON reservations.customer_id = customer.customer_id
LEFT JOIN ordered_services ON reservations.reservation_id = ordered_services.reservation_id
GROUP BY reservation.reservation_id, customer.customer_id, customer.name
ORDER BY reservation.reservation_id
reservation_id | customer_id |        added
     1         |  1909091202 | 2011-11-04 02:37:28
     2         |  2512541508 | 2011-11-04 14:27:01
顾客

customer_id | name | personal information columns ...
 1909091202 | John |       |      | 
 2512541508 | Jane |       |      |  
    ...     | ...  |       |      |
付款

payment_id | reservation_id | customer_id | total |        added
     1     |        2       |  1909091202 |   199 | 2011-11-04 02:37:28
     2     |        2       |  2512541508 |    50 | 2011-11-04 14:27:01

类似于以下的方法应该可以工作:

select 
reservation.reservation_id, 
(case when exists (select * from payments p1 where p1.reservation_id = reservation.reservation_id) then 1 else 0 end) as one_or_many_payments_made 
from reservation
GROUP BY reservation.reservation_id
ORDER BY reservation.reservation_id

但是如果没有您的数据,这里会有一些猜测。

您可以对附加字段使用子选择

SELECT reservation.reservation_id, customer.customer_id, customer.name, 
count(ordered_services.reservation_id) AS num_of_ordered_services,
(SELECT count(*) FROM payments WHERE reservation.reservation_id=payments.reservation_id) AS num_of_payments
FROM reservations
JOIN customers ON reservations.customer_id = customer.customer_id
LEFT JOIN ordered_services ON reservations.reservation_id = ordered_services.reservation_id
GROUP BY reservation.reservation_id, customer.customer_id, customer.name
ORDER BY reservation.reservation_id

如果不知道您的表结构,则无法回答此问题。谢谢!不过,我不会将您的答案设置为“已接受”,因为我在项目的另一部分中使用了这种子查询。