台灣最大程式設計社群網站
線上人數
1652
 
會員總數:246493
討論主題:190002
歡迎您免費加入會員
討論區列表 >> MS SQL >> [SQL]請問同時搜尋不同資料表?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
[SQL]請問同時搜尋不同資料表?
價值 : 0 QP  點閱數:3696 回應數:6
樓主

llmin
初學者
97 34
16 30
發送站內信

捐贈 VP 給 groban
我知道這個問題很多人問過了,可是試了前面幾個方法還是搞不定,只好重新問一次。 ^^||
我現在的需求是,一個資料庫中有兩個相似的資料表POST和REPLY,
其中POST有個儲存原文作者的欄位NAME,REPLY有個儲存回應作者的欄位R_NAME,
我希望搜尋字串能同時比對NAME和R_NAME的資料,
原本的陽春語法只能搜尋符合NAME的資料:
SQL="SELECT * FROM POST WHERE NAME LIKE '%"&KEYWORD&"%' ORDER BY -1*ID "
前面有網友說用union連結,可是該怎麼用呢?
謝謝!

笨笨的新手

本篇文章發表於2002-04-27 22:21
1樓
回應

笨笨的老手
檢舉此回應
如果你的NAME、rEPLY這個是關聯而且資料是一對一  不是像討論區一樣一對多
你可以使用MS SQL裡面的View把這二個表連在一起,如果是MySQL請自已打SQL序敘使用join的方式..如果是一對多 我的建議是回圈帶回圈.
本篇文章回覆於2002-04-28 01:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

htmler
檢舉此回應
二個查詢的欄位 性質要相當, 數量要一致.

Select a1, a2 From aTable Where ...
Union
Select b1, b2 From bTable Where ...

結合後, 欄位名用頭一個查詢的 a1, a2
本篇文章回覆於2002-04-28 03:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

ClarkKang
檢舉此回應
你的這兩個資料表如果是有關聯性的, 在某一個資料表加入 Forign Key
如: 兩個資料表都有一個欄位是文章ID(ArticalID)
就可以用下面的語法
Select * From POST p, REPLY r Where p.NAME Like '%"& strKeyWord &"%' And p.ArticalID = r.ArticalID Order By p.Name Desc
如一對多的欄位就可以用
Select * From POST p, REPLY r Where p.NAME Like '%"& strKeyWord &"%' And p.ArticalID =* r.ArticalID Order By p.Name Desc
本篇文章回覆於2002-04-28 10:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

llmin
捐贈 VP 給 groban 檢舉此回應
真抱歉,小弟對資料庫的知識都是自修而來,還是不甚了解上述的用法耶!
我再說明清楚一點好了,
我現在有兩個關聯的資料表POST和REPLY,兩個資料表結構相似,
POST有個自動編號的欄位ID,
REPLY也有自動編號的欄位ID,另外比POST多出一個R_ID的欄位,
「一個POST的ID」可以對應到「一或數個REPLY的R_ID」,
那我現在希望搜尋字串KEYWORD能同時搜尋
「POST的NAME欄位」和「REPLY的R_NAME欄位」的資料,
然後輸出結果以「POST的ID」反向排序。

這樣應該夠清楚了吧!好像是很小兒科的問題,
可是我實在是個很菜的新手,please forgive me!   ><~~
本篇文章回覆於2002-04-28 19:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

darren
檢舉此回應
select * from post inner join reply on post.id = reply.r_id
where post.name like '%xx%' or reply.r_name like '%xx%'
order by post.id desc
這樣寫會影響效能  不過應該可以滿足你的需求

建議可以建立一個view V_allpost
select * from post inner join reply on post.id = reply.r_id
order by post.id desc

然後用
select * from V_allPost
where post.name like '%xx%' or reply.r_name like '%xx%'
來search也是可以的

本篇文章回覆於2002-04-29 01:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

llmin
捐贈 VP 給 groban 檢舉此回應
感謝熱心的網友!
可是以上幾個方法我都試過了,都會出現以下錯誤訊息:
Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e21' 
ODBC 驅動程式不支援此要求內容。 

是哪個部分出問題呢?傷腦筋! @@||a
本篇文章回覆於2002-04-29 03:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.