sql - 如何在一个查询中有多个select / from语句

时间:2013-04-01 14:56:16

标签: sql

我正在尝试提取每个列从特定表集中选择的报告。但是,其中一列需要从完全不同的表集中提取并仍包含在同一报表中。当然,这不起作用:

select u.first_name, ticket_work.time_spent
FROM tickets LEFT OUTER JOIN ticket_work ON ticket_work.ticket_id = tickets.id JOIN users u
(select count(tickets.id) FROM tickets JOIN users u)

where tickets.assigned_to = u.id

...

因此,只需要从不同的表集中选择(select count(tickets.id) FROM tickets JOIN users u)部分,但仍然包含在报告中。

3 个答案:

答案 0 :(得分:0)

我对你的问题感到有些困惑。您想要返回用户,该用户的门票数量以及整体花费的时间吗?如果是这样,这样的事情应该有效:

select u.id, u.first_name, 
    SUM(tw.time_spent) summed_time_spent, 
    COUNT(DISTINCT t.id) count_tickets
FROM users u
    LEFT JOIN tickets t
        ON u.id = t.assigned_to
    LEFT JOIN ticket_work tw
        ON tw.ticket_id = t.id 
GROUP BY u.id, u.first_name

答案 1 :(得分:0)

你的问题不清楚,但一般来说,听起来你正试图加入derived table(即查询)。在这种情况下,请执行以下操作:

SELECT...
FROM...
table_A A LEFT JOIN 
   (SELECT keyfield, valuefield FROM table_b WHERE ...) B 
   ON A.keyfield = B.keyfield

这有意义吗?要创建派生表,可以在括号内放置一个查询,给它一个别名(在本例中为“B”),然后将它连接到其他表,就像它是常规表一样。

答案 2 :(得分:0)

不了解您的表结构,但您可以使用子查询来满足此类要求

select u.first_name, ticket_work.time_spent,(select count(tickets.id) FROM tickets where ticket.id=ticket_work.ticket_id) as myCount
FROM tickets LEFT OUTER JOIN ticket_work ON ticket_work.ticket_id = tickets.id JOIN users u
where tickets.assigned_to = u.id