如果没有看到你的一些数据,很难给你一个查询,但是如果你将你的子查询移动到你的 select 表达式,你可以返回可用的计数(当它们都被保留时,这将是 0)。然后,当您显示数据时,您可以检查计数是否为 0,并显示您的不可用消息。
编辑:
鉴于桌车:
+----+----------+
| id | model |
+----+----------+
| 1 | viper |
| 2 | explorer |
| 3 | viper |
| 4 | explorer |
+----+----------+
和餐桌预订:
+-------+------------+
| carid | date |
+-------+------------+
| 1 | 2013-03-07 |
| 3 | 2013-03-07 |
+-------+------------+
类似于您上面的查询将返回:
+----+----------+
| id | model |
+----+----------+
| 2 | explorer |
+----+----------+
如果您将其更改为:
SELECT
`outer`.`model`,
(
SELECT COUNT(*)
FROM
`cars` AS `inner`
WHERE
`inner`.`model` = `outer`.`model` AND
`inner`.`id` NOT IN(
SELECT `carid`
FROM `reservations`
WHERE `date` = '2013-03-07'
)
GROUP BY `inner`.`model`
) AS `count`
FROM cars AS `outer`
GROUP BY `outer`.`model`;
那么你会得到如下结果:
+----------+-------+
| model | count |
+----------+-------+
| explorer | 2 |
| viper | NULL |
+----------+-------+
如果您随后需要将 NULL 值返回为 0,您可以使用 COALESCE,如 Liv 之前提到的。
它不漂亮,我相信它可以用一种更清洁的方式完成,但它确实有效。