用于连接两个表的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实践的时候了。