簡體   English   中英

將兩部分SQL查詢連接到一個查詢中

[英]Join two part SQL query into one query

這就是我所擁有的:

詢問

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|     |
----------------------

有可能嗎?

試試這個查詢

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;

使用此模板,只需將上面的查詢作為T1和T2的子查詢插入:

Select *
from ( 
) T1 
join ( 
) T2  on T2.tdesc = T1.cdesc and T2.Tag1 = T1.TopLevel and T2.Tag2 = T1.SubLevel
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM