Database Oracle中的嵌套选择
我试着做如下事情Database Oracle中的嵌套选择,database,oracle,Database,Oracle,我试着做如下事情 SELECT ID_ESTACIONAMIENTO FROM ESTACIONAMIENTO WHERE '-33.52053824804071,-70.68874349999999' = (SELECT LATITUD_ESTACIONAMIENTO||','||LONGITUD_ESTACIONAMIENTO FROM ESTACIONAMIENTO); 但是回来了 ORA-01427: single-row subquery returns m
SELECT ID_ESTACIONAMIENTO
FROM ESTACIONAMIENTO
WHERE '-33.52053824804071,-70.68874349999999'
= (SELECT LATITUD_ESTACIONAMIENTO||','||LONGITUD_ESTACIONAMIENTO FROM ESTACIONAMIENTO);
但是回来了
ORA-01427: single-row subquery returns more than one row
01427. 00000 - "single-row subquery returns more than one row"
*Cause:
*Action:
如何获取ID?在将值(在本例中为“-33.52053824804071,-70.688743499999”)与concat查询进行比较的位置,我认为更好的方法是单独检查纬度和经度列:
SELECT ID_ESTACIONAMIENTO
FROM ESTACIONAMIENTO
WHERE LATITUD_ESTACIONAMIENTO = '-33.52053824804071' AND
LONGITUD_ESTACIONAMIENTO = '-70.68874349999999'
请注意,如果纬度/经度数据存储在数字列中,则可能不需要使用引号
如果要“修复”确切的当前查询,则只需直接在WHERE
子句中使用外部查询中连接的列:
SELECT ID_ESTACIONAMIENTO
FROM ESTACIONAMIENTO
WHERE LATITUD_ESTACIONAMIENTO||','||LONGITUD_ESTACIONAMIENTO =
'-33.52053824804071,-70.68874349999999'
顺便说一下,错误背后的原因是子查询返回多行,这是不言而喻的。实际上,它应该返回
ESTACIONAMIENTO
表中的每一行。我认为更好的方法是单独检查纬度和经度列:
SELECT ID_ESTACIONAMIENTO
FROM ESTACIONAMIENTO
WHERE LATITUD_ESTACIONAMIENTO = '-33.52053824804071' AND
LONGITUD_ESTACIONAMIENTO = '-70.68874349999999'
请注意,如果纬度/经度数据存储在数字列中,则可能不需要使用引号
如果要“修复”确切的当前查询,则只需直接在WHERE
子句中使用外部查询中连接的列:
SELECT ID_ESTACIONAMIENTO
FROM ESTACIONAMIENTO
WHERE LATITUD_ESTACIONAMIENTO||','||LONGITUD_ESTACIONAMIENTO =
'-33.52053824804071,-70.68874349999999'
顺便说一下,错误背后的原因是子查询返回多行,这是不言而喻的。实际上,它应该返回
ESTACIONAMIENTO
表中的每一行。您不需要子查询,也不需要连接
SELECT ID_ESTACIONAMIENTO
FROM ESTACIONAMIENTO
WHERE LATITUD_ESTACIONAMIENTO = -33.52053824804071
AND LONGITUD_ESTACIONAMIENTO = -70.68874349999999;
如果输入是连接纬度和经度的字符串,则应将其分解,而不是连接表中的值。类似于-如果输入是str='-33.52053824804071,-70.688743499999'
-
... WHERE LATITUD_ESTACIONAMIENTO = to_number(substr(str, 1, instr(str, ',') - 1))
AND LONGITUD_ESTACIONAMIENTO = to_number(substr(str, instr(str, ',') + 1));
您不需要子查询,也不需要连接
SELECT ID_ESTACIONAMIENTO
FROM ESTACIONAMIENTO
WHERE LATITUD_ESTACIONAMIENTO = -33.52053824804071
AND LONGITUD_ESTACIONAMIENTO = -70.68874349999999;
如果输入是连接纬度和经度的字符串,则应将其分解,而不是连接表中的值。类似于-如果输入是str='-33.52053824804071,-70.688743499999'
-
... WHERE LATITUD_ESTACIONAMIENTO = to_number(substr(str, 1, instr(str, ',') - 1))
AND LONGITUD_ESTACIONAMIENTO = to_number(substr(str, instr(str, ',') + 1));