全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1328
推到 Plurk!
推到 Facebook!

請問一個SQL語法問題

尚未結案
selina
一般會員


發表:39
回覆:64
積分:20
註冊:2002-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-17 09:53:48 IP:203.162.xxx.xxx 未訂閱
請問各位高手 我有3個table A : Name | Class | LID | DID B : LID | Name | Address C : DID | Name | Address 我要從3 個table中找出學生的Name, Class, LID, DID, B.Name, B.Address, C.Name, D.Address where Class = A. 因為我會用 join語法,有那位知道可以教小妹一下嗎? A li ka to~
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-17 10:08:08 IP:61.220.xxx.xxx 未訂閱
妳的a,b,c 的table 裡面的 name 及 address 不知道資料是否是相同的 如果資料是不一樣 建議妳取不一樣的欄位名稱較好分別 如果資料是一樣 則 c 的 table 就是多餘的 這裡同樣連結 a,b,c 參考看看 (sql server) select a.name,a.class,a.lid,a.did,b.address as baddress ,b.name as bname, c.name as cname , c.address as caddress from A a left join B b on ( a.lid = b.lid ) left join C c on ( a.did = c.did ) where a.class = A (ORACLE) select a.name,a.class,a.lid,a.did,b.address as baddress ,b.name as bname, c.name as cname , c.address as caddress from A a , B b,C c where (a.lid = b.lid( )) and (a.did = c.did( )) and a.class = A ps : as 後面是別名 天行健 君子當自強不息~~@.@ 發表人 - t.j.b 於 2003/03/17 10:27:12 發表人 - t.j.b 於 2003/03/17 11:22:31
------
天行健
君子當自強不息~~@.@
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-17 10:16:11 IP:218.16.xxx.xxx 未訂閱
select Name, Class, LID, DID, B.Name, B.Address, C.Name, C.Address 
  from A, B, C 
  where A.LID = B.LID
    and A.DID = C.DID
    and Class = "A"
不就可以了嗎? (我是假設你 where Class = A 的意思是 A.Class 欄位的值是 "A") (修改: 紅色處不小心 copy 了你的 D.Address) 發表人 -
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-17 10:43:40 IP:61.219.xxx.xxx 未訂閱
引言: 請問各位高手 我有3個table A : Name | Class | LID | DID B : LID | Name | Address C : DID | Name | Address 我要從3 個table中找出學生的Name, Class, LID, DID, B.Name, B.Address, C.Name, D.Address where Class = A. 因為我會用 join語法,有那位知道可以教小妹一下嗎? A li ka to~
selina 妳好, 你最好說清楚一些, 大家才能幫妳:
1. 何種資料庫 ?
2. 需求要用 inner/outer join ? 
   (A Table 之 LID 不存在於 B Table 中時, 資料要不要出來 ?,
    A Table 之 DID 不存在於 C Table 中時, 資料要不要出來 ?)
假設"是":
// for MSSQL or Sybase
SELECT A.Class,A.LID,A.DID,A.NAME as AName,B.Name as BName, B.Address as BAddress, 
C.Name as CNAME, C.Address as C.Address
FROM A,B,C
WHERE A.Class = 'A'
AND A.LID *= B.LID
AND A.DID *= C.DID
// for Oracle
SELECT A.Class,A.LID,A.DID,A.NAME as AName,B.Name as BName, B.Address as BAddress, 
C.Name as CNAME, C.Address as C.Address
FROM A,B,C
WHERE A.Class = 'A'
AND A.LID = B.LID( )
AND A.DID = C.DID( )
/* Free 和 Create 一樣重要 */ 發表人 - Mickey 於 2003/03/17 10:46:08
cmj
高階會員


發表:15
回覆:242
積分:226
註冊:2002-06-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-17 11:17:01 IP:211.76.xxx.xxx 未訂閱
假設妳的TABLE NAME叫 AA BB CC B.LID , C.DID是PRIMAYR KEY SQL語法如下 SELECT A.NAME,A.CLASS,A.LID,A.DID,B.NAME AS BBNAME,B.ADDRESS, C.NAME AS CCNAME,C.ADDRESS AS CCADDRESS FROM AA A LEFT JOIN BB B ON B.LID=A.LID LEFT JOIN CC C ON C.DID=A.DID WHERE A.CLASS=A 注意三個TABLE之NAME為不同意義但名稱相同所以用AS以區分,當抓取資料出來 欄名為NAME,BBNAME,CCNAME ADDRESS同樣處理為ADDRESS,CCADDRESS,如些以區同欄名之欄
selina
一般會員


發表:39
回覆:64
積分:20
註冊:2002-12-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-17 11:27:40 IP:203.162.xxx.xxx 未訂閱
對不起沒寫清楚, table A, B, C中的name儲存的東西都不一樣的,所以不能拿table A.Name跟其他的比,只能拿table A.LID跟 B.LID, A.DID 跟 C.DID比
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-17 11:52:36 IP:211.76.xxx.xxx 未訂閱
hi, 請試試: SELECT A.Name, A.Class, A.LID, A.DID, B.Name, B.Address, C.Name, C.Address FROM A LEFT JOIN B ON A.LID = B.LID LEFT JOIN C ON A.DID=C.DID WHERE A.Class = 'A' A Left Join B 代表 A 有 B 沒有的也要出現 若是改為 A INNER JOIN B 的話, 代表 A 有 B 也要有的才要出現!! 看你的用途來使用 Join 的方式!!
selina
一般會員


發表:39
回覆:64
積分:20
註冊:2002-12-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-17 12:13:41 IP:203.162.xxx.xxx 未訂閱
謝謝T.J.B~~ 照你的方法出來的結果就是我要的 謝謝~
alice100001
一般會員


發表:21
回覆:49
積分:19
註冊:2002-09-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-17 15:27:07 IP:203.204.xxx.xxx 未訂閱
引言: hi, 請試試: SELECT A.Name, A.Class, A.LID, A.DID, B.Name, B.Address, C.Name, C.Address FROM A LEFT JOIN B ON A.LID = B.LID LEFT JOIN C ON A.DID=C.DID WHERE A.Class = 'A' A Left Join B 代表 A 有 B 沒有的也要出現 若是改為 A INNER JOIN B 的話, 代表 A 有 B 也要有的才要出現!! 看你的用途來使用 Join 的方式!!
我用access 測試您的方法,可是不知道為什麼一直會有少了運算元的錯誤訊息,請問是acess不支援以上的寫法嗎?
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-17 17:25:45 IP:211.76.xxx.xxx 未訂閱
引言:
引言: hi, 請試試: SELECT A.Name, A.Class, A.LID, A.DID, B.Name, B.Address, C.Name, C.Address FROM A LEFT JOIN B ON A.LID = B.LID LEFT JOIN C ON A.DID=C.DID WHERE A.Class = 'A' A Left Join B 代表 A 有 B 沒有的也要出現 若是改為 A INNER JOIN B 的話, 代表 A 有 B 也要有的才要出現!! 看你的用途來使用 Join 的方式!!
我用access 測試您的方法,可是不知道為什麼一直會有少了運算元的錯誤訊息,請問是acess不支援以上的寫法嗎?
請將 WHERE A.Class = 'A' 改為 WHERE A.Class = "A"
selina
一般會員


發表:39
回覆:64
積分:20
註冊:2002-12-05

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-03-17 17:49:18 IP:203.162.xxx.xxx 未訂閱
謝謝各熱心的回應 我最初寫的語法有是: SELECT A.Name, A.Class, A.LID, A.DID, B.Name, B.Address, C.Name, C.Address FROM (select A.Name, A.class, A.LID, A.DID FROM A WHERE A.Class = ''A'') AA LEFT JOIN B ON AA.LID = B.LID LEFT JOIN C ON AA.DID=C.DID 寫出來的結果不對, 現在照你們的寫法就可以寫出來了...謝謝~~~
系統時間:2024-06-28 17:34:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!