首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用无效(不存在)外键值查询时,MySQL强制执行失败语句

问当使用无效(不存在)外键值查询时,MySQL强制执行失败语句
EN

Stack Overflow用户
提问于 2022-07-21 10:40:09
回答 1查看 26关注 0票数 1

我要寻找的是,当通过表的外键列的无效索引(id)查询表时,MySQL语句会失败。

详情:

我有两个故事:

汽车:

代码语言:javascript
复制
id | username | brand | model | location

保留:

代码语言:javascript
复制
id | car_id | username | date

列reservations.car_id通过外键绑定到列cars.id (在更新级联上的删除级联上),其中列reservations.car_id是列cars.id的子列。

通缉行为

我要做的是,当试图使用无效的car_id**.**获取单个或多个保留行时,语句会失败--当car_id有效时,语句应该返回一个空数组( cars表中有一个带有该id的行),但是该car_id在表中没有保留。

我正在寻找这种行为,因为我希望区分查询何时成功,但只是没有结果(因此是一个空数组),以及查询失败时(因此我将返回一个)。为了我的项目,当通过无效的car_id查询预订时,我希望它失败,而不是简单地返回一个空数组。

实际行为

当我运行声明时:

代码语言:javascript
复制
SELECT * FROM reservations WHERE car_id = :car_id

这个语句是成功的,但是当获取查询结果时,它只是返回一个空数组。我希望它返回null。

这些是我以前尝试过的尝试:

代码语言:javascript
复制
SELECT * FROM reservations
            JOIN cars ON reservations.car_id = cars.id
            WHERE cars.id = :car_id;

此语句成功,但返回一个空数组。

代码语言:javascript
复制
SELECT * FROM reservations WHERE car_id = ( SELECT id FROM cars WHERE id = :car_id );

此语句也成功,但返回一个空数组。

EN

回答 1

Stack Overflow用户

发布于 2022-07-21 10:55:27

你所说的失败是什么意思还不清楚。如果您的意思是https://dev.mysql.com/doc/refman/5.7/en/signal.html并让调用程序来处理它,您将需要一个存储过程或类似的代码。但这将是一个奇怪和难以维护的方式,以满足你的要求。

如果您的意思是返回结果集中某个位置的值None,您可以这样做。它使用LEFT JOIN ... IS NULL模式来检测缺少的连接行。

代码语言:javascript
复制
SELECT cars.id, 
       COALESCE(reservations.car_id, 'No reservations!!!') 
  FROM cars
  LEFT JOIN reservations  ON reservations.car_id = cars.id
 WHERE cars.id = :car_id;

我会尝试将其放入一个更有用的查询中,但是您使用了SELECT *,所以我无法猜测您的表中有哪些列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73064706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档