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));