好吧,我正在尝试用这里的最后两列:每张票都有一个与之关联的日志,可以有多个条目。我试图获得最新的条目给定一个票号,并根据与该条目相关的时间戳,创建一个查询,显示自上次输入以来已经过了多少时间。最后一列也显示了已用时间,但是对于特定类型的日记帐分录。 此查询中的条目需要限制为拥有与2人中的1人相对应的所有者ID的故障单。在这个例子中,那些人是'aaaa cccc'和'bbbb dddd'。所以,当我运行查询时,它只是挂起。此外,当我删除最后2列时,它仍然会挂起,所以我认为它与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' ))
答案 0 :(得分: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' ))
答案 1 :(得分:0)
你在哪里链接你的表? 门票,customer_care_tickets,帐户和订单???? 在这一刻,您实现了交叉连接(笛卡尔产品)。 如果你想实现INNER JOIN,我建议你使用显式表示法。 门票 加入customer_care_tickets cct ON t.id = cct.fk_ticket
等等。
完成此修复后,告诉我它是否正常