用于连接两个表的sql查询

用于连接两个表的sql查询,sql,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 --- -----

可能重复:

我有一个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
我不想得到这个结果,而是想得到这个结果:

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
我应该如何编写查询


另外,假设在时间表中,每个lid正好有两条记录

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

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 ;
这可以通过这样的方式轻松完成

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;
查询所做的是选择正常的lid和状态,但选择最小tid1和最大tid2。因为只有两个结果,一个是最大的,第二个是最小的

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

最后,根据位置id和状态名称对结果进行分组


看到它在这里工作了吗

这个问题我有自己的解决方案

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

select * from
location l, time t1, time t2
where l.lid=t1.lid and l.lid=t2.lid and t1.tid<t2.tid
从中选择*
位置l,时间t1,时间t2

其中l.lid=t1.lid和l.lid=t2.lid和t1.tid只有两个tid匹配吗?或者它可以是任何数字?你可以这样做:乔达卡问题的答案将决定你问题的答案,约翰尼森。而且总是正好2匹配?不要只使用隐式连接?你需要停止使用隐式连接,它们是一种非常好的实践和SQL Anitpattern。20年前,它们被显式联接所取代,现在是停止使用这种过时且糟糕的R实践的时候了。