我要寻找的是,当通过表的外键列的无效索引(id)查询表时,MySQL语句会失败。
详情:
我有两个故事:
汽车:
id | username | brand | model | location保留:
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查询预订时,我希望它失败,而不是简单地返回一个空数组。
实际行为
当我运行声明时:
SELECT * FROM reservations WHERE car_id = :car_id这个语句是成功的,但是当获取查询结果时,它只是返回一个空数组。我希望它返回null。
这些是我以前尝试过的尝试:
SELECT * FROM reservations
JOIN cars ON reservations.car_id = cars.id
WHERE cars.id = :car_id;此语句成功,但返回一个空数组。
SELECT * FROM reservations WHERE car_id = ( SELECT id FROM cars WHERE id = :car_id );此语句也成功,但返回一个空数组。
发布于 2022-07-21 10:55:27
你所说的失败是什么意思还不清楚。如果您的意思是https://dev.mysql.com/doc/refman/5.7/en/signal.html并让调用程序来处理它,您将需要一个存储过程或类似的代码。但这将是一个奇怪和难以维护的方式,以满足你的要求。
如果您的意思是返回结果集中某个位置的值None,您可以这样做。它使用LEFT JOIN ... IS NULL模式来检测缺少的连接行。
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 *,所以我无法猜测您的表中有哪些列。
https://stackoverflow.com/questions/73064706
复制相似问题