請教大家
當使用下列的語法
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
但是當我在加上一個子查詢
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'))
會變成只有3筆資料,是否可以一樣顯示6筆原來所要顯示的資料呢?謝謝
所以問題是為什麼六筆變三筆嗎?
可能的原因大概是你用contentid in pageid
假設pageid 撈出來1,2,3,4,5,6
但contentid跟pageid的資料對可能是(1,1)(1,2)(2,3)(2,4)(3,5)(3,6)之類的
那最後撈出來就只有三筆挺正常的
sql 結構 跟 用contentid來與pageid比對出所要的資料(需求描述不明確) 2者意義不相符,
以下以Tab2 out JOIN TAB1 也不算真的的2個table 比對,
只是將tab2 6筆不管tab1有沒有都秀出來,tab1 有值就秀出來
SELECT TAB2.pageid, TAB1.contentid
FROM content TAB1,
(SELECT pageid
FROM content
WHERE contentid IN (SELECT contentid
FROM content
WHERE contenttype = 'COMMENT'
AND creationdate BETWEEN '2017/3/1'
AND '2017/4/1'))TAB2
WHERE TAB2.pageid = TAB1.contentid(+)
TAB2有6筆 OUT JOIN TAB1 對上 3筆, 6筆都會秀
架構很特別,
從contenttype 來看是很多類型都放一齊,
contenttype 'COMMENT'這類別 pageid 有值可能指是for page 使用,
但'COMMENT' 也有可能用於別的類別,
6筆裡的3筆是對應到page,另外3筆可能不是對應到page這一類,而是別類,
不過這資料架構感覺有種什麼都丟一籃,
無法推想另外3筆一定對應同個table裡的資料
請教前輩
使用ctn7001的方式可行,是否可以再與另外一個資料表join抓出資料呢?在content資料表中有個spaceid欄位,而我想與spaces資料表的spaceid欄位join後抓出這6筆所在的spacename,謝謝
SELECT TAB2.pageid, TAB1.contentid ,TAB3 spacename
FROM content TAB1,
(SELECT pageid
FROM content
WHERE contentid IN (SELECT contentid
FROM content
WHERE contenttype = 'COMMENT'
AND creationdate BETWEEN '2017/3/1'
AND '2017/4/1'))TAB2,spaces TAB3
WHERE TAB2.pageid = TAB1.contentid(+) and
TAB1.spaceid = TAB3.spaceid
感覺你首要先了解一下 index 抓來取key值可以加速你理解 自已的資料庫結構