修复 SQL 子查询 return 多行
Fix SQL subquery return multiple row
我正在 运行 使用 oracle 进行此查询,但我遇到了著名的 oracle 错误 ORA-01427: single-row subquery returns more than one row
Select
DISTINCT s1.cityArrival,
s2.cityDeparture,
s2.sectionStartDate,
userFirstName
FROM
sections s1,
sections s2,
trajectory t,
userInfo
WHERE
s1.trajectId = s2.trajectId
AND t.trajectId = s1.trajectId
AND (
s1.cityArrival = 'Paris'
AND s2.cityDeparture = 'Rochelle'
)
AND driverMail = mailUser
AND (
Select
availableSeats
FROM
sections s3
WHERE
s3.trajectId = s1.trajectId
AND s2.sectionId <= s3.sectionId
AND s3.sectionId <= s1.sectionId
) not IN (0)
我想select给定日期和到达城市和出发城市的轨迹,每个部分都有一个可用座位> 0。问题是如果没有在 sql 中循环,它变得复杂。
SectionId 只是建议轨迹中途经城市的索引,这就是为什么我可以使用它来获取两个给定目的地之间的所有块。
注意:我设计了数据库,如果您对设计有任何意见,请随时告诉我,在此先感谢
您可以反转 IN 操作数,前提是恰好要检查一个值 0。
..
AND 0 not IN (
Select
availableSeats
FROM
sections s3
WHERE
s3.trajectId = s1.trajectId
AND s2.sectionId <= s3.sectionId
AND s3.sectionId <= s1.sectionId
)
错误是由IN子句之前的子查询引起的。第一部分 returns 一个结果集而不是一个表达式。下面是使用 IN 子句的语法:https://docs.oracle.com/cd/B19306_01/server.102/b14200/conditions013.htm
另一方面,您可以将 WHERE 子句中的最后一个子查询更新为
...
AND EXISTS (SELECT 1
FROM
sections s3
WHERE
s3.trajectId = s1.trajectId
AND s2.sectionId <= s3.sectionId
AND s3.sectionId <= s1.sectionId
AND s3.availableSeats > 0
)
我正在 运行 使用 oracle 进行此查询,但我遇到了著名的 oracle 错误 ORA-01427: single-row subquery returns more than one row
Select
DISTINCT s1.cityArrival,
s2.cityDeparture,
s2.sectionStartDate,
userFirstName
FROM
sections s1,
sections s2,
trajectory t,
userInfo
WHERE
s1.trajectId = s2.trajectId
AND t.trajectId = s1.trajectId
AND (
s1.cityArrival = 'Paris'
AND s2.cityDeparture = 'Rochelle'
)
AND driverMail = mailUser
AND (
Select
availableSeats
FROM
sections s3
WHERE
s3.trajectId = s1.trajectId
AND s2.sectionId <= s3.sectionId
AND s3.sectionId <= s1.sectionId
) not IN (0)
我想select给定日期和到达城市和出发城市的轨迹,每个部分都有一个可用座位> 0。问题是如果没有在 sql 中循环,它变得复杂。
SectionId 只是建议轨迹中途经城市的索引,这就是为什么我可以使用它来获取两个给定目的地之间的所有块。
注意:我设计了数据库,如果您对设计有任何意见,请随时告诉我,在此先感谢
您可以反转 IN 操作数,前提是恰好要检查一个值 0。
..
AND 0 not IN (
Select
availableSeats
FROM
sections s3
WHERE
s3.trajectId = s1.trajectId
AND s2.sectionId <= s3.sectionId
AND s3.sectionId <= s1.sectionId
)
错误是由IN子句之前的子查询引起的。第一部分 returns 一个结果集而不是一个表达式。下面是使用 IN 子句的语法:https://docs.oracle.com/cd/B19306_01/server.102/b14200/conditions013.htm
另一方面,您可以将 WHERE 子句中的最后一个子查询更新为
...
AND EXISTS (SELECT 1
FROM
sections s3
WHERE
s3.trajectId = s1.trajectId
AND s2.sectionId <= s3.sectionId
AND s3.sectionId <= s1.sectionId
AND s3.availableSeats > 0
)