2013-03-06 91 views
0

這是我有:加入兩部分的SQL查詢到一個查詢

查詢

select 
bc.short_desc as cdesc 
from 
blog_post as bp 
left join blog_post_category_link as blpc on bp.post_id = blpc.post_id 
inner join blog_category as bc on blpc.cat_id = bc.cat_id 
where bp.post_id = 1 

結果

---------------- 
| |cdesc  | 
---------------- 
|1|Top level | 
---------------- 
|2|Sub level | 
---------------- 
|3|SubSub level| 
---------------- 

第二個查詢

select 
bt.short_desc as tdesc 
from 
blog_post as bp 
left join blog_post_tag_link as blpt on bp.post_id = blpt.post_id 
inner join blog_tag as bt on blpt.tag_id = bt.tag_id 
where bp.post_id = 1 

第二個結果

---------------- 
| |tdesc  | 
---------------- 
|1|Tag1  | 
---------------- 
|2|Tag2  | 
---------------- 

加入這兩個查詢

---------------------- 
| |cdesc  |tdesc| 
---------------------- 
|1|Top level |Tag1 | 
---------------------- 
|2|Sub level |Tag2 | 
---------------------- 
|3|SubSub level|  | 
---------------------- 

是否有可能在之後的所有期望的結果?

回答

2

嘗試此查詢

SET @rn1 = 0; 
SET @rn2 = 0; 

SELECT t1.rId, t1.cdesc, t2.tdesc 
FROM 
(select @rn1 := rn1 + 1 AS rId, bc.short_desc as cdesc 
from blog_post as bp 
left join blog_post_category_link as blpc on bp.post_id = blpc.post_id 
inner join blog_category as bc on blpc.cat_id = bc.cat_id 
where bp.post_id = 1) t1, 
(select @rn2 := rn2 + 1 AS rId, bt.short_desc as tdesc 
from blog_post as bp 
left join blog_post_tag_link as blpt on bp.post_id = blpt.post_id 
inner join blog_tag as bt on blpt.tag_id = bt.tag_id 
where bp.post_id = 1) t2 
WHERE t1.rId = t2.rId; 

對於MS SQL服務器

SELECT t1.rId, t1.cdesc, t2.tdesc 
FROM 
(select row_number() over(order by bp.post_id) AS rId, bc.short_desc as cdesc 
from blog_post as bp 
left join blog_post_category_link as blpc on bp.post_id = blpc.post_id 
inner join blog_category as bc on blpc.cat_id = bc.cat_id 
where bp.post_id = 1) t1, 
(select row_number() over(order by bp.post_id) AS rId, bt.short_desc as tdesc 
from blog_post as bp 
left join blog_post_tag_link as blpt on bp.post_id = blpt.post_id 
inner join blog_tag as bt on blpt.tag_id = bt.tag_id 
where bp.post_id = 1) t2 
WHERE t1.rId = t2.rId; 
+0

是不是'mysql'?我得到錯誤「附近的語法不正確:'' – Morpheus 2013-03-06 10:04:27

+0

它是爲MySQL ..我已經在小提琴中測試它。 – Meherzad 2013-03-06 10:07:00

+0

Pl發佈完整的錯誤。 – Meherzad 2013-03-06 10:09:25

0

使用該模板,只需插入從上面的查詢作爲子查詢的T1和T2:

Select * 
from ( 
) T1 
join ( 
) T2 on T2.tdesc = T1.cdesc and T2.Tag1 = T1.TopLevel and T2.Tag2 = T1.SubLevel 
+0

謝謝你的建議。 「標籤1,頂級」等是可以編輯和添加的隨機名稱。可以是成百上千的。 – Morpheus 2013-03-06 09:38:00

+0

您正在加入數百或數千個未知領域?怎麼可能?然後,我只是誤解了;用兩個子查詢替換實際的連接字段名稱。 – 2013-03-06 09:42:11

0
SELECT 
bc.short_desc AS cdesc, bt.short_desc AS tdesc 
FROM 
blog_post AS bp 
LEFT JOIN blog_post_category_link AS blpc ON bp.post_id = blpc.post_id 
INNER JOIN blog_category AS bc ON blpc.cat_id = bc.cat_id 
LEFT JOIN blog_post_tag_link AS blpt ON bp.post_id = blpt.post_id 
INNER JOIN blog_tag AS bt ON blpt.tag_id = bt.tag_id 
WHERE bp.post_id = 1 
+0

這將返回=> 1 |頂級| Tag2,2 |頂級| Tag1,3 | Sub級別| Tag2,4 | Sub級別| Tag1,5 | SubSub級別| Tag2,6 | SubSub級別| Tag1' – Morpheus 2013-03-06 09:48:02

+0

@ Morpheus哦,對,你只是想列出它們...所以我認爲你需要告訴什麼分貝然後。 – 2013-03-06 09:52:09