我的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);
有什么问题和解决方法,请帮忙?
你这样说:
SELECT P.DAYS
FROM PLPLANPEAKPROGRAM P
WHERE P.ID = 1060;
返回1,2,3
。这意味着它将返回一个字符串值。没有包含三个元素的列表。该to_char()
函数调用返回单个值,例如1
或2
。没有逗号,因此它们不匹配。
这是错误的数据格式。您应该将列表存储为每行一个元素。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] 删除。
我来说两句