Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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 T-SQL子查询返回了多个值_Mysql_Sql Server_Tsql - Fatal编程技术网

Mysql T-SQL子查询返回了多个值

Mysql T-SQL子查询返回了多个值,mysql,sql-server,tsql,Mysql,Sql Server,Tsql,这是存储过程中的IF语句。我有多个预订,我想检查它们是否与我要添加的预订相交。问题是如何将查询返回的多个值与变量进行比较 您应该在开始日期和结束日期上设置最小值或最大值。大概是这样的: IF (SELECT begin_date FROM reservation WHERE id=@id) <=@end_date AND (SELECT end_date FROM reservation WHERE id=@id) >= @begin_date BEGIN PRINT 'al

这是存储过程中的IF语句。我有多个预订,我想检查它们是否与我要添加的预订相交。问题是如何将查询返回的多个值与变量进行比较

您应该在开始日期和结束日期上设置最小值或最大值。大概是这样的:

IF (SELECT begin_date FROM reservation WHERE id=@id) <=@end_date
AND
(SELECT end_date FROM reservation WHERE id=@id) >= @begin_date
BEGIN
    PRINT 'already reserved'
    RETURN
END

如果根据查询,您的“已保留”逻辑是正确的,那么这应该满足您的要求

IF (SELECT MIN(begin_date) FROM reservation WHERE id=@id) <=@end_date
AND
(SELECT MAX(end_date) FROM reservation WHERE id=@id) >= @begin_date
BEGIN
    PRINT 'already reserved'
    RETURN
END

你应该在begin_date和end_date上加上MIN或MAX。但我想把它与所有未来的预订进行比较,不仅仅是一个预订。你试过下面的答案了吗?@id是什么?为什么要用它作为参数?@Ala这是存储过程。所以我猜,ID是指基于用户输入的预订ID,以及begin_date/end_date。如果可以在数据库中存储的第一个事件的开始和最后一个事件的结束之间预订一个时间,该怎么办?
IF EXISTS (SELECT *
           FROM reservation rsv1
           WHERE rsv1.id=@id
             AND rsv1.begin_date <=@end_date
             AND rsv1.end_date >= @begin_date)
BEGIN
PRINT 'already reserved'
END