0

好吧,我想对这里的最后两列做些什么:每张票都有一个与之关联的日志,可以有多个条目。我正在尝试获取给定票号的最新条目,并根据与条目关联的时间戳创建一个查询,显示自上次条目以来已经过去了多少时间。最后一列也显示经过的时间,但针对特定类型的日记帐分录。此查询的条目需要限制为具有对应于 2 人中的 1 人的所有者 ID 的工单。在此示例中,这些人是“aaaa cccc”和“bbbb dddd”。所以,当我运行查询时,它只是挂起。此外,当我删除最后两列时,它仍然挂起,所以我认为它与 where 语句有关。我在这里不知所措,但是由于我对sql很陌生,

SELECT t.ticket_id, 
   cct.issue, 
   t.status, 
   t.priority, 
   a.account_name, 
   o.identifier, 
   To_char(t.created, 'MM/dd/yyyy hh:mm:ss')   AS  "CREATED", 
   To_char(SYSDATE - (SELECT Max(ti.timestamp) 
                      FROM   ticket_journal ti 
                      WHERE  ti.ticket_id = t.ticket_id), 'hh:mm:ss') AS "LAST_ENTRY", 
   To_char(SYSDATE - (SELECT Max(ti.timestamp) 
                      FROM   ticket_journal ti 
                      WHERE  ti.ticket_id = t.ticket_id 
                             AND ( ti.journal_type LIKE 'External' 
                                    OR ti.journal_type LIKE 'External/WIP' 
                                 )), 'hh:mm:ss')                   AS "LAST_EXT_ENTRY" 
FROM   tickets t, 
   customer_care_tickets cct, 
   accounts a, 
   orders o 
WHERE  t.owner IN (SELECT cont.contact_id 
                   FROM   contacts cont 
                   WHERE  ( cont.first_name LIKE 'aaaa' 
                          OR cont.first_name LIKE 'bbbb' ) 
                   AND ( cont.last_name LIKE 'cccc' 
                        OR cont.last_name LIKE 'dddd' )) 
4

1 回答 1

1

看起来你可能在这里有一个笛卡尔连接。http://www.orafaq.com/wiki/Cartesian_join

我不确定你的数据库键是如何构造的,所以我只是在下面猜测,但它可能会让你知道你需要如何链接你的表。这些是 ANSI 连接,不是特定于 Oracle 的。我建议您学习使用这些类型的连接,以便您的代码更便携。我希望这有帮助。

对于外连接使用 FULL JOIN,对于内连接使用 JOIN 或 INNER JOIN。对于左/右连接,使用 LEFT JOIN 或 RIGHT JOIN。

FROM tickets t
   JOIN customer_care_tickets cct ON t.ticket_id = cct.ticket_id
   JOIN accounts a ON cct.account_id = a.account_id
   JOIN orders o ON o.ticket_id = t.ticket_id
WHERE  t.owner IN (SELECT cont.contact_id 
                   FROM   contacts cont 
                   WHERE  ( cont.first_name LIKE 'aaaa' 
                          OR cont.first_name LIKE 'bbbb' ) 
                   AND ( cont.last_name LIKE 'cccc' 
                        OR cont.last_name LIKE 'dddd' )) 
于 2013-07-17T15:47:48.753 回答