gpt4 book ai didi

mysql - 验证(子)表中值的存在并返回 "boolean"结果

转载 作者:可可西里 更新时间:2023-11-01 07:37:12 24 4
gpt4 key购买 nike

我想在 MySQL 中的订单表上创建一个查询,并验证它是否有预订 ID,如果没有预订 ID,它应该可用于发票表中的所有关系。

我希望返回的值是单个字段中的 bool 值。

以给出的例子为例,在

  • 我希望 id #1 立即为真,因为它可用

  • ID #2 的情况我希望发票表中出现“延迟”错误,因为并非所有相关发票都有 booking_id,它应该只在发票 ID #3 确实有时返回 true一个预订 ID,这意味着所有发票都有一个 booking_id 而订单没有。

我已经尝试了几种方法,但仍然失败,甚至不知道解决这个问题的最佳方法是什么。

提前感谢您的输入!

表格顺序:

|----+------------+

| id | booking_id |

|----+------------+

| 1 | 123 |

| 2 | NULL |

|----+------------+

表格发票:

+----+----------+------------+

| id | order_id | booking_id |

+----+----------+------------+

| 1 | 1 | 123 |

| 2 | 2 | 124 |

| 3 | 2 | NULL |

+----+----------+------------+

架构

CREATE TABLE IF NOT EXISTS `invoice` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`order_id` int(11) NOT NULL,
`booking_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
)

CREATE TABLE IF NOT EXISTS `order` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`booking_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

最佳答案

如果我没理解错的话,这是你请求的基本查询:

SELECT
O.id
, SUM(CASE WHEN I.booking_id IS NOT NULL THEN 1 ELSE 0 END) AS booked_count
, COUNT(1) AS total_count
, CASE WHEN SUM(CASE WHEN I.booking_id IS NOT NULL THEN 1 ELSE 0 END) = COUNT(1) THEN 1 ELSE 0 END AS has_all_bookings
FROM
`order` O
LEFT JOIN invoice I
ON O.id = I.order_id
GROUP BY
O.id

如果要检查发票表中是否没有记录,请将 COUNT(1) 添加到最后一个 CASE 语句作为附加条件 (COUNT(1) = 0)

Fiddle Demo

关于mysql - 验证(子)表中值的存在并返回 "boolean"结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22941698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com