Oracle SQL内部选择不起作用

火山

我的pl / sql语句有问题。

这是很好的选择语句:

SELECT P.DAYS FROM PLPLANPEAKPROGRAM P WHERE P.ID = 1060;

退货; 1,2,3(varchar2)

主要的SQL在这里:

SELECT * 
from FIFLIGHTS   
LEFT JOIN PLPLANPEAKPROGRAMCOPY ON FIFLIGHTS.IATACODE = PLPLANPEAKPROGRAMCOPY.STATIONCODE   
WHERE  TO_CHAR(FIFLIGHTS.SCHEDULEDTIME, 'D') IN (SELECT  P.DAYS 
                                                 FROM PLPLANPEAKPROGRAM P 
                                                 WHERE P.ID = 1060) ;

但这不会返回任何结果。

上面的这个也很好地返回了;

SELECT * 
from FIFLIGHTS   
LEFT JOIN PLPLANPEAKPROGRAMCOPY ON FIFLIGHTS.IATACODE = LPLANPEAKPROGRAMCOPY.STATIONCODE   
WHERE TO_CHAR(FIFLIGHTS.SCHEDULEDTIME, 'D') IN (1,2,3);

有什么问题和解决方法,请帮忙?

戈登·利诺夫(Gordon Linoff)

你这样说:

SELECT P.DAYS
FROM PLPLANPEAKPROGRAM P
WHERE P.ID = 1060;

返回1,2,3这意味着它将返回一个字符串值。没有包含三个元素的列表。to_char()函数调用返回单个值,例如12没有逗号,因此它们不匹配。

这是错误的数据格式。您应该将列表存储为每行一个元素。SQL提供了一种非常强大的方式来存储列表(称为表)。也就是说,您可以使用以下方法解决此问题exists

SELECT *
from FIFLIGHTS LEFT JOIN
     PLPLANPEAKPROGRAMCOPY
     ON FIFLIGHTS.IATACODE = PLPLANPEAKPROGRAMCOPY.STATIONCODE
WHERE EXISTS (SELECT 1
              FROM PLPLANPEAKPROGRAM P
              WHERE P.ID = 1060 and
                    P.DAYS LIKE '%' || TO_CHAR(FIFLIGHTS.SCHEDULEDTIME, 'D') || '%'
             );

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章