【问题标题】:Getting ORA-01427 trying to select all from view I've created获取 ORA-01427 试图从我创建的视图中选择所有
【发布时间】:2016-11-02 03:09:17
【问题描述】:

我使用这些查询从表中创建了一个视图

CREATE VIEW AVAIL_TOOLS AS
SELECT T.TOOL_NAME AS "Name", R.RETAILER_NAME AS "Retailer", T.RETAILER_NUM AS "Number", I.TI_STATUS AS "Status",
(SELECT 
  CASE 
     WHEN DETAIL_RETURNDATE IS NULL THEN TO_CHAR(DETAIL_DUEDATE,'Day, Month, DD, YYYY') 
     ELSE 'Now' END FROM DETAILRENTAL) AS "Expected Avaliablity"  
FROM TOOL T
INNER JOIN RETAILER R
ON T.RETAILER_NUM = R.RETAILER_NUM
INNER JOIN TOOLINSTANCE I
ON T.TOOL_NUM = I.TOOL_NUM
WHERE (I.TI_STATUS = 'Rented') OR (I.TI_STATUS = 'Available')
ORDER BY T.TOOL_NAME;

现在当我尝试运行 SELECT * FROM AVAIL_TOOLS 我收到错误 ORA-01427:单行子查询返回多于一行。 我在查询中运行的情况显然似乎是问题所在。现在无论如何我可以改变查询。我正在尝试创建一个视图,如果返回日期为空,它将在返回时可用,否则它应该是现在。

我不知道应该如何改变才能获得所需的结果。

【问题讨论】:

    标签: oracle


    【解决方案1】:

    当您填写正确的连接条件时,下面的查询应该会执行您想要的操作。

    CREATE VIEW AVAIL_TOOLS AS
    SELECT T.TOOL_NAME AS "Name", R.RETAILER_NAME AS "Retailer", T.RETAILER_NUM AS "Number", I.TI_STATUS AS "Status", 
      CASE 
         WHEN DETAIL_RETURNDATE IS NULL THEN TO_CHAR(DETAIL_DUEDATE,'Day, Month, DD, YYYY') 
         ELSE 'Now' END "Expected Avaliablity"  
    FROM TOOL T
    INNER JOIN RETAILER R
    ON T.RETAILER_NUM = R.RETAILER_NUM
    INNER JOIN TOOLINSTANCE I
    ON T.TOOL_NUM = I.TOOL_NUM
    LEFT OUTER JOIN DETAILRENTAL DR
    ON (I.ID? = DR.TOOL_INSTANCE_ID?) --HERE fill join
    WHERE (I.TI_STATUS = 'Rented') OR (I.TI_STATUS = 'Available')
    ORDER BY T.TOOL_NAME;
    

    第二个选项是在子查询中添加 case where 子句基于与 join 相同的条件:

    where I.INSTANCE_ID = DETAILRENTAL.INSTANCE_ID
    

    【讨论】:

    • 在我添加了左连接后它可以解决,但它似乎重复了一些项目并添加了不应该在那里的项目。但是我关于这个案子的问题已经解决了。谢谢
    【解决方案2】:

    您正在将DETAILRENTAL 中所有行的CASE 表达式的结果与来自三表连接的所有行相结合。相反,您可能只需要主 SELECT 中特定工具的“预期可用性”。您可以通过将子查询变为相关子查询来修复它;但是将CASE 表达式作为外部SELECT 中的列而不包含在子查询中,并在您需要加入的任何内容上添加到DETAILRENTAL 的连接(可能是TOOL_NUM ?)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多