從制造到創(chuàng)造
          軟件工程師成長(zhǎng)之路
          posts - 292,  comments - 96,  trackbacks - 0

            有兩個(gè)表,文章表中TypeId字段記錄欄目Id,欄目表中的字段是欄目Id和欄目名,現(xiàn)在要達(dá)到的效果就是讀取文章列表的時(shí)候顯示欄目名稱(chēng)。
            以前沒(méi)用過(guò)inner join外聯(lián)操作,所以就束手無(wú)策了。其實(shí)有些功能是僅僅靠SQL語(yǔ)句就可以實(shí)現(xiàn)的,inner join能夠組合兩個(gè)表中的記錄,只要在公共字段之中有相符的值。
            所以要顯示欄目名稱(chēng),只要用如下SQL語(yǔ)句:
            Select [Article].id,[Article].content,[欄目表].[欄目名稱(chēng)] FROM [Article] inner  join [欄目表] on [欄目表].id=[Article].ArType orDER BY [ArId] DESC

          ------------------------------------------------------------------------------

          附相關(guān)文章:

            多表聯(lián)接建立記錄集是十分有用的,因?yàn)槟承┣闆r下,我們需要把數(shù)字?jǐn)?shù)據(jù)類(lèi)型顯示為相應(yīng)的文本名稱(chēng),這就遇到了多表聯(lián)接建立記錄集的問(wèn)題。比如作一個(gè)會(huì)員注冊(cè)系統(tǒng),共有五個(gè)表,會(huì)員信息數(shù)據(jù)表member、會(huì)員身份表MemberIdentity、會(huì)員權(quán)限表 MemberLevel、會(huì)員類(lèi)別表MemberSort和會(huì)員婚姻狀況表Wedlock。如果想把會(huì)員注冊(cè)信息全部顯示出來(lái),肯定要將這四個(gè)表連起來(lái),否則大家看到的某些會(huì)員信息可能只是數(shù)據(jù)編號(hào)。

            以會(huì)員類(lèi)別表來(lái)說(shuō),在其數(shù)據(jù)表中,1代表普通會(huì)員,2代表高級(jí)會(huì)員,3代表終身會(huì)員,在顯示時(shí),如果不將會(huì)員類(lèi)別表與會(huì)員詳細(xì)數(shù)據(jù)表相關(guān)聯(lián),那么假如我們現(xiàn)在看到的是一名普通會(huì)員的注冊(cè)信息,我們只能看到其類(lèi)別為1,而誰(shuí)又會(huì)知道1代表的是普通會(huì)員呢?所以要將會(huì)員類(lèi)別表與會(huì)員詳細(xì)數(shù)據(jù)表相關(guān)聯(lián),關(guān)聯(lián)后,1就顯示為普通會(huì)員,2就顯示為高級(jí)會(huì)員,3就顯示為終身會(huì)員,這樣多好?同理,其它兩個(gè)表也要與會(huì)員詳細(xì)數(shù)據(jù)表相關(guān)聯(lián)才能把數(shù)據(jù)編號(hào)顯示為相應(yīng)的名稱(chēng)。
              
            前天制作網(wǎng)站后臺(tái)時(shí)遇到此問(wèn)題,在面包論壇、狂迷俱樂(lè)部、藍(lán)色理想、和5D多媒體論壇發(fā)了貼子求救,都沒(méi)有獲得答案,只好自己研究,花了兩天時(shí)間終于成功,現(xiàn)將其寫(xiě)成教程供大家分享,希望大家少走彎路。
            本教程是把五個(gè)表聯(lián)在一起,如果愿意,您可以將更多的表聯(lián)在一起,方法大同小異啦~
              
            步驟一:用Access軟件建立一個(gè)名為Member的數(shù)據(jù)庫(kù),在其中建五個(gè)表,分別為:會(huì)員信息數(shù)據(jù)表member、會(huì)員身份表MemberIdentity、會(huì)員權(quán)限表MemberLevel、會(huì)員類(lèi)別表MemberSort和會(huì)員婚姻狀況表Wedlock。
              
              ●會(huì)員信息數(shù)據(jù)表member:
              MemberID:自動(dòng)編號(hào),主鍵(ID號(hào))
              MemberSort:數(shù)字(會(huì)員類(lèi)別)
              MemberName:文本,會(huì)員姓名
              Password:文本(會(huì)員密碼)
              MemberLevel:數(shù)字(會(huì)員權(quán)限)
              MemberIdentity:數(shù)字(會(huì)員身份)
              Wedlock:數(shù)字(婚姻狀況)
              MemberQQ:文本(QQ號(hào)碼)
              MemberEmail:文本(會(huì)員郵箱)
              MemberDate:日期/時(shí)間(會(huì)員注冊(cè)日期)
              
              ●會(huì)員身份表MemberIdentity:
              MemberIdentity:自動(dòng)編號(hào),主鍵(ID號(hào))
              IdentityName:文本(會(huì)員身份名稱(chēng))
              
              ●會(huì)員權(quán)限表MemberLevel:
              MemberLevel:自動(dòng)編號(hào),主鍵(ID號(hào))
              LevelName:文本(會(huì)員權(quán)限名稱(chēng))
              
              ●會(huì)員類(lèi)別表MemberSort:
              MemberSort:自動(dòng)編號(hào),主鍵(ID號(hào))
              SortName:文本(會(huì)員類(lèi)別名稱(chēng))
              
              ●會(huì)員婚姻狀況表Wedlock
              Wedlock:自動(dòng)編號(hào),主鍵(ID號(hào))
              WedlockName:文本(會(huì)員婚姻狀況類(lèi)別)

              說(shuō)明:五個(gè)表建好后,您可以自行設(shè)置您想要的類(lèi)別,如會(huì)員權(quán)限,您可以設(shè)置兩個(gè)類(lèi)別--“未付費(fèi)會(huì)員”和“已付費(fèi)會(huì)員”,編號(hào)分別為“1”、“2”,如您設(shè)置了三個(gè)選項(xiàng),那么第三個(gè)選項(xiàng)的編號(hào)當(dāng)然就是“3”了。
              下面我們所要作的工作就是把“1”、“2”之類(lèi)的編號(hào)顯示為“未付費(fèi)會(huì)員”和“已付費(fèi)會(huì)員”,否則,大家誰(shuí)會(huì)知道“1”代表的是“未付費(fèi)會(huì)員”,“2”代表的是“已付費(fèi)會(huì)員”?
              
              步驟二:建DSN數(shù)據(jù)源,建記錄集
              ●運(yùn)行Dreamweaver MX軟件,在會(huì)員注冊(cè)信息顯示頁(yè)面建一個(gè)名為ConnMember(您也可以起其它的名稱(chēng))的DSN數(shù)據(jù)源。
              
              ●點(diǎn)擊服務(wù)器行為面板中的“綁定”,建一個(gè)名為MemberShow的數(shù)據(jù)集,“連接”選擇ConnMember,“表格”選擇Member,“列”全選,“排序”選擇MemberDate,降序。點(diǎn)擊“高級(jí)”按鈕,修改SQL框中自動(dòng)生成的代碼:
              原代碼為:
              Select *
              FROM Member
              orDER BY MemberDate DESC
              
              將代碼修改為:
              Select *
              FROM (((Member INNER JOIN MemberSort ON Member.MemberSort=MemberSort.MemberSort) INNER JOIN MemberLevel ON Member.MemberLevel=MemberLevel.MemberLevel) INNER JOIN MemberIdentity ON Member.MemberIdentity=MemberIdentity.MemberIdentity) INNER JOIN Wedlock ON Member.Wedlock=Wedlock.Wedlock
              orDER BY MemberDate DESC

              修改完代碼后,點(diǎn)擊“確定”,大功告成!
               現(xiàn)在,您可以打開(kāi)記錄集看一下,五個(gè)表中的字段全部集成在MemberShow記錄集中,您只要將相應(yīng)的字段綁定在該字段想顯示的單元格中即可。這下好了,所有的數(shù)字編號(hào)全部變成了相應(yīng)的名稱(chēng),如會(huì)員權(quán)限,不再是“1”和“2”的數(shù)字形式了,而是變成了相應(yīng)的名稱(chēng)“未付費(fèi)會(huì)員”和“已付費(fèi)會(huì)員”。其它的數(shù)字編號(hào)也變成了顯示的文本名稱(chēng),是不是很開(kāi)心呢?
              
              注意事項(xiàng):
              ●在輸入字母過(guò)程中,一定要用英文半角標(biāo)點(diǎn)符號(hào),單詞之間留一半角空格;
              ●在建立數(shù)據(jù)表時(shí),如果一個(gè)表與多個(gè)表聯(lián)接,那么這一個(gè)表中的字段必須是“數(shù)字”數(shù)據(jù)類(lèi)型,而多個(gè)表中的相同字段必須是主鍵,而且是“自動(dòng)編號(hào)”數(shù)據(jù)類(lèi)型。否則,很難聯(lián)接成功。
              ● 代碼嵌套快速方法:如,想連接五個(gè)表,則只要在連接四個(gè)表的代碼上加一個(gè)前后括號(hào)(前括號(hào)加在FROM的后面,后括號(hào)加在代碼的末尾即可),然后在后括號(hào)后面繼續(xù)添加“INNER JOIN 表名X ON 表1.字段號(hào)=表X.字段號(hào)”代碼即可,這樣就可以無(wú)限聯(lián)接數(shù)據(jù)表了:)
              
              語(yǔ)法格式:
              其實(shí) INNER JOIN ……ON的語(yǔ)法格式可以概括為:
              FROM  (((表1 INNER JOIN 表2 ON 表1.字段號(hào)=表2.字段號(hào)) INNER JOIN 表3 ON 表1.字段號(hào)=表3.字段號(hào))  INNER JOIN 表4 ON Member.字段號(hào)=表4.字段號(hào)) INNER JOIN 表X ON Member.字段號(hào)=表X.字段號(hào)
              您只要套用該格式就可以了。
              
              現(xiàn)成格式范例:
              雖然我說(shuō)得已經(jīng)比較明白了,但為照顧初學(xué)者,我還是以本會(huì)員注冊(cè)系統(tǒng)為例,提供一些現(xiàn)成的語(yǔ)法格式范例,大家只要修改其中的數(shù)據(jù)表名稱(chēng)和字段名稱(chēng)即可。
              
              連接兩個(gè)數(shù)據(jù)表的用法:
              FROM Member INNER JOIN MemberSort ON Member.MemberSort=MemberSort.MemberSort
              語(yǔ)法格式可以概括為:
              FROM 表1 INNER JOIN 表2 ON 表1.字段號(hào)=表2.字段號(hào)
              
              連接三個(gè)數(shù)據(jù)表的用法:
              FROM (Member INNER JOIN MemberSort ON Member.MemberSort=MemberSort.MemberSort) INNER JOIN MemberLevel ON Member.MemberLevel=MemberLevel.MemberLevel
              語(yǔ)法格式可以概括為:
              FROM (表1 INNER JOIN 表2 ON 表1.字段號(hào)=表2.字段號(hào)) INNER JOIN 表3 ON 表1.字段號(hào)=表3.字段號(hào)
              
              連接四個(gè)數(shù)據(jù)表的用法:
              FROM ((Member INNER JOIN MemberSort ON Member.MemberSort=MemberSort.MemberSort) INNER JOIN MemberLevel ON Member.MemberLevel=MemberLevel.MemberLevel) INNER JOIN MemberIdentity ON Member.MemberIdentity=MemberIdentity.MemberIdentity
              語(yǔ)法格式可以概括為:
              FROM ((表1 INNER JOIN 表2 ON 表1.字段號(hào)=表2.字段號(hào)) INNER JOIN 表3 ON 表1.字段號(hào)=表3.字段號(hào)) INNER JOIN 表4 ON Member.字段號(hào)=表4.字段號(hào)
              
              連接五個(gè)數(shù)據(jù)表的用法:
              FROM (((Member INNER JOIN MemberSort ON Member.MemberSort=MemberSort.MemberSort) INNER JOIN MemberLevel ON Member.MemberLevel=MemberLevel.MemberLevel) INNER JOIN MemberIdentity ON Member.MemberIdentity=MemberIdentity.MemberIdentity) INNER JOIN Wedlock ON Member.Wedlock=Wedlock.Wedlock
              語(yǔ)法格式可以概括為:
              FROM  (((表1 INNER JOIN 表2 ON 表1.字段號(hào)=表2.字段號(hào)) INNER JOIN 表3 ON 表1.字段號(hào)=表3.字段號(hào))  INNER JOIN 表4 ON Member.字段號(hào)=表4.字段號(hào)) INNER JOIN 表5 ON Member.字段號(hào)=表5.字段號(hào)

          ------------------------------------------------------------------------------

          INNER JOIN 運(yùn)算

          組合兩個(gè)表中的記錄,只要在公共字段之中有相符的值。
          語(yǔ)法

          FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2

          INNER JOIN 運(yùn)算可分為以下幾個(gè)部分:
          部分     說(shuō)明
          table1, table2     記錄被組合的表的名稱(chēng)。
          field1, field2     被聯(lián)接的字段的名稱(chēng)。若它們不是由數(shù)字構(gòu)成的,則這些字段必須為相同的數(shù)據(jù)類(lèi)型并包含同類(lèi)數(shù)據(jù),但它們無(wú)須具有相同的名稱(chēng)。
          compopr     任何的關(guān)系比較運(yùn)算子:"=," "<," ">," "<=," ">=," 或 "<>."

          說(shuō)明

          可以在 FROM 子句中使用INNER JOIN運(yùn)算。.這是最普通的聯(lián)接類(lèi)型。只要在這兩個(gè)表的公共字段之中有相符值,內(nèi)部聯(lián)接將組合兩個(gè)表中的記錄。

          可以使用 INNER JOIN 與部門(mén)表及員工表選擇每一個(gè)部門(mén)中的全部員工。反之,可以使用 LEFT JOIN或 RIGHT JOIN運(yùn)算創(chuàng)建 outer join,從而選擇所有部門(mén)(即使有些并沒(méi)有員工)或所有員工(即使有些尚未分配到部門(mén))。

          若試圖聯(lián)接包含 Memo或 OLE Object數(shù)據(jù)的字段,會(huì)導(dǎo)致錯(cuò)誤。

          可以聯(lián)接任何兩個(gè)相同類(lèi)型的數(shù)值字段。例如,可以聯(lián)接 AutoNumber和 Long字段,因?yàn)樗鼈冾?lèi)型相似。但不能聯(lián)接 Single 和 Double 類(lèi)型的字段。

          下列示例顯示如何在類(lèi)標(biāo)識(shí)符字段聯(lián)接類(lèi)表及產(chǎn)品表:

          Select CategoryName, ProductName

          FROM Categories INNER JOIN Products

          ON Categories.CategoryID = Products.CategoryID;

          在上面的示例中,類(lèi)標(biāo)識(shí)符是已被聯(lián)接的字段,但是它并不包含在查詢(xún)輸出中,因它并非被包含在 Select 語(yǔ)句之中。在這個(gè)示例中,若要包含聯(lián)接字段,將字段名包含在 Select 語(yǔ)句中, Categories.CategoryID.

          也可以使用下列語(yǔ)法,在一個(gè) JOIN 語(yǔ)句中鏈接多個(gè) ON 子句:

          Select fields
          FROM table1 INNER JOIN table2
          ON table1.field1 compopr table2.field1 AND
          ON table1.field2 compopr table2.field2) or
          ON table1.field3 compopr table2.field3)];

          也可以使用下列語(yǔ)法,嵌套 JOIN 語(yǔ)句:

          Select fields
          FROM table1 INNER JOIN
          (table2 INNER JOIN [( ]table3
          [INNER JOIN [( ]tablex [INNER JOIN ...)]
          ON table3.field3 compopr tablex.fieldx)]
          ON table2.field2 compopr table3.field3)
          ON table1.field1 compopr table2.field2;

          在一個(gè) INNER JOIN 之中,可以嵌套 LEFT JOIN 或 RIGHT JOIN,但是在 LEFT JOIN 或 RIGHT JOIN 中不能嵌套 INNER JOIN。

          原文鏈接:
          http://www.and8.net/article.asp?id=194

          posted on 2008-01-17 15:48 CoderDream 閱讀(527) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 每日網(wǎng)摘

          <2008年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(9)

          我參與的團(tuán)隊(duì)

          隨筆分類(lèi)(245)

          隨筆檔案(239)

          文章分類(lèi)(3)

          文章檔案(3)

          收藏夾(576)

          友情鏈接

          搜索

          •  

          積分與排名

          • 積分 - 459380
          • 排名 - 114

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 通化县| 江山市| 梓潼县| 三亚市| 深圳市| 抚顺县| 荔波县| 龙海市| 武宣县| 定兴县| 徐闻县| 德保县| 白水县| 长宁县| 陆良县| 攀枝花市| 桂阳县| 遂宁市| 新野县| 东辽县| 西昌市| 松江区| 军事| 鹤壁市| 珲春市| 运城市| 花垣县| 永年县| 南宁市| 布尔津县| 吴忠市| 崇礼县| 涡阳县| 中方县| 塔城市| 车致| 抚顺县| 洪洞县| 敦化市| 凌海市| 丹阳市|