0

可能重复:
从 2 个表中选择简单 SQL(什么是联接?)

我有一个 sql 查询问题。两张表:

地点

lid  State
---  -----
1    MI
2    FL
3    CA

时间

tid lid
a   1
b   1
c   2
d   2
e   3
f   3

现在我想连接这两个表。如果我做:

select l.lid, l.state, t.tid 
from location l, time t 
where l.lid=t.lid

然后它会给我这个结果:

lid state tid
--- ----- ---
1   MI    a
1   MI    b
2   FL    c
2   FL    d
3   CA    e
3   CA    f

我不想得到这个,而是想要得到这个结果:

lid state tid1 tid2
--- ----- ---- ----
1   MI    a    b
2   FL    c    d
3   CA    e    f

我应该如何编写查询?

此外,假设在Time表中,每个盖子正好有两条记录

4

3 回答 3

2

您正在尝试的问题是它不会对结果进行分组,并且 GROUP BY 子句只能与聚合函数结合使用。

这可以通过像这样使用来轻松完成

select location.lid as [lid],
        location.state as [state],
        min(time.tid) as [tid1],
        max(time.tid)as [tid2] 

from
      location,time 
where
      location.lid = time.lid 

group by 
      location.state,location.lid;

查询的作用是正常选择盖子和状态,但选择最小 tid1 和最大 tid2。由于只有两个结果,一个是最大的,第二个是最小的。

(查询只选择最大值和最小值。如果有三个值,查询仍然只显示两个结果。)

最后,结果按位置 ID 和州名分组。

看到它在这里工作SqlFiddle

于 2012-07-19T14:53:29.567 回答
1
SELECT 
    l.lid, l.state, 
    MIN(t.tid) AS tid1,
    MAX(t.tid) AS tid2
FROM
        location AS l
    JOIN 
        time AS t 
            ON l.lid = t.lid
GROUP BY
    l.lid, l.state ;
于 2012-07-19T14:12:13.643 回答
-1

我有我自己的版本解决这个问题。

只需连接两个时间表并使用大于运算符。

select * from
location l, time t1, time t2
where l.lid=t1.lid and l.lid=t2.lid and t1.tid<t2.tid
于 2012-07-19T17:01:42.680 回答