2012-07-19 119 views
0

可能重複SQL查詢:
Simple SQL Select from 2 Tables (What is a Join?)用於連接兩個表

我有一個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 

我應該怎麼寫查詢?

此外,假設在時間表將有正好兩個記錄爲每個蓋。

+2

只會有兩個匹配的tid嗎?或者它可以是任何數字? – Jodaka 2012-07-19 14:00:40

+1

你可以這樣做:http:// stackoverflow。com/questions/9472986/combine-rows-of-queried-by-unique-identifier – paul 2012-07-19 14:02:53

+0

Jodaka問題的答案將決定你的問題的答案,JohnnySun。 – Crontab 2012-07-19 14:03:31

回答

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 ; 
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來完成。由於只有兩個結果,一個是最大值,另一個是最小值。

(該查詢僅選擇的最大和最小值,如果有三個valuse查詢仍然將只顯示兩個結果。)

並在最後的結果是由位置ID和狀態名稱分組。

看到它在這裏工作SqlFiddle

-1

我有我自己的版本解決這個問題。

只是連接兩個時間表和使用大於運算符。

select * from 
location l, time t1, time t2 
where l.lid=t1.lid and l.lid=t2.lid and t1.tid<t2.tid