我正在运行以下查询,该查询不断说明给出了多于一行:
select filestorage.id
from `filestorage`
where (SELECT LEFT(filestorage_inst_data.value, length(filestorage_inst_data.value - 1)) as seconds
FROM filestorage_inst_data
WHERE filestorage_inst_data.parameter = "Time" AND filestorage_inst_data.filestorage_id = filestorage.id) <= 3600
由于某种原因,唯一的第一个值被传递到子查询中。另外,如果我确实在子查询中设置了一个限制,以至于无法很好地获取数据,那只是我不明白为什么查询会获取多个结果?
答案 0 :(得分:1)
尝试一下:
SELECT filestorage.id
FROM filestorage f
WHERE EXISTS(SELECT 1 FROM filestorage_inst_data fid
WHERE fid.parameter = 'Time'
AND fid.filestorage_id = f.id
AND CAST(LEFT(fid.value, length(fid.value - 1)) AS UNSIGNED) <= 3600)
答案 1 :(得分:0)
在where子句中提供select语句时,您必须传递特定的一行。 select子句,您在where子句上使用的子句必须返回一个唯一的行。例如。
"SELECT * FROM user WHERE role_id=(SELECT role_id FROM user_role WHERE role_name='Admin');"