台灣最大程式設計社群網站
線上人數
1117
 
會員總數:239370
討論主題:185707
歡迎您免費加入會員
討論區列表 >> MS SQL >> 子查詢應用的問題
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
子查詢應用的問題
價值 : 20 QP  點閱數:265 回應數:7

樓主

雲林仔
初學者
961 1482
8269 1209
發送站內信

請教大家
當使用下列的語法
select pageid from content where contentid in (select contentid from content where contenttype='COMMENT' and creationdate between '2017/3/1' and '2017/4/1')
所查詢出來的pageid有下列6筆
57181233
49414303
47120909
47120909
49414303
49414303

但是當我在加上一個子查詢
[b](select pageid from content where contentid in (select contentid from content where contenttype='COMMENT' and creationdate between '2017/3/1' and '2017/4/1'))

會變成只有3筆資料,是否可以一樣顯示6筆原來所要顯示的資料呢?謝謝




搜尋相關Tags的文章: [ 子查詢 ] ,
本篇文章發表於2017-04-04 11:52
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

QOO
捐贈 VP 給 QOO 檢舉此回應
眼睛業障重@@

你的兩個SQL似乎沒有什麼差別,還是我理解錯誤了@@ 
本篇文章回覆於2017-04-04 15:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

雲林仔
檢舉此回應
抱歉,你是對的
我貼錯了,應該如下語法
select * from content where contentid in (select pageid from content where contentid in (select contentid from content where contenttype='COMMENT' and creationdate between '2017/3/1' and '2017/4/1'))
(1.先抓出3月份comment的contentid 2.如此可知道這些comment的pageid 3. 最後在與contentid比對)
本篇文章回覆於2017-04-04 17:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

pilipala
檢舉此回應

沒有很清楚說明,不過可以往自我連結這方向去試看看,應該是不用一直用 in 才對


本篇文章回覆於2017-04-05 10:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

QOO
捐贈 VP 給 QOO 檢舉此回應
想法沒問題,應該還是SQL語法怪怪的

select * from content where contentid in (
     select pageid from content where contentid in (
         select contentid from content where contenttype='COMMENT' and creationdate between '2017/3/1' and '2017/4/1'))


你這樣寫的感覺是

1.先從content中,找出contenttype='COMMENT' and creationdate between '2017/3/1' and '2017/4/1'的資料,然後只取出contentid

2.再拿content去比對這些資料,找出contentid在1之中的資料,只列出pageid

3.拿content的資料,用contentid去比對2的pageid,一樣的才取出來




依照你的想法1,2,3可以其實可以合成一句就好了

select pageid ,contentid from content where contenttype='COMMENT' and creationdate between '2017/3/1' and '2017/4/1'




本篇文章回覆於2017-04-05 15:16
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

雲林仔
檢舉此回應
感謝幫忙
目前知道的方式,與pilipala所說的方式依樣,想再請教是否可以再與另外一個資料表join抓出資料呢?在content資料表中有個spaceid欄位,而我想與spaces資料表的spaceid欄位join後抓出這6筆所在的spacename,謝謝


即在原本這段語法select pageid from content where contentid in (select contentid from content where contenttype='COMMENT' and creationdate between '2017/3/1' and '2017/4/1') 中有抓出pageid與spaceid了,要如何在此時join到spaces資料表? 感謝
本篇文章回覆於2017-04-07 07:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
最有價值解答

pilipala
檢舉此回應
請試看看

建議了解一下 JOIN 的相關語法
本篇文章回覆於2017-04-11 13:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

雲林仔
檢舉此回應
滿有幫助的資訊,感謝大家的幫忙
本篇文章回覆於2017-04-13 20:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

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