2010-06-11 57 views
1

我有以下SQL查詢區分SQL的結果右連接

SELECT `User`.`username` , Permalink.perma_link_id, Permalink.locale, 
    Permalink.title, DATEDIFF(CURDATE() , Permalink.created) AS dtdiff, 
    `TargetSegment`.segment_text, TargetSegment.source_segment_id, 
    TargetSegment.perma_link_id ,TargetSegment.created , 
    TargetSegment.updated, DATEDIFF(CURDATE() , 
    TargetSegment.updated) AS datediff 
FROM `users` AS `User` 
RIGHT JOIN perma_links AS `PermaLink` 
    ON (`PermaLink`.`username` = `User`.`username`) 
RIGHT JOIN target_segments AS `TargetSegment` 
    ON (`TargetSegment`.`username` = `User`.`username`) 
RIGHT JOIN source_segments AS `SourceSegment` 
    ON (`SourceSegment`.`source_detail_id` = `PermaLink`.`source_detail_id`) 
LEFT JOIN source_details AS `SourceDetail` 
    ON (`SourceSegment`.`source_detail_id` = `SourceDetail`.`id`) 
WHERE `TargetSegment`.`username` = "xxxx" 
AND `TargetSegment`.`segment_text` <> "" 
AND `Permalink`.`perma_link_id` = `TargetSegment`.`perma_link_id` 
AND `TargetSegment`.`source_segment_id` = `SourceSegment`.`id` 
AND `Permalink`.`source_detail_id` = `SourceDetail`.`id` 
ORDER BY `TargetSegment`.`updated` DESC 
LIMIT 0 , 10 

這個SQL是獲取正確的結果對於我,我想從哪個表的每一行,以確定是否從,具體哪些結果是由於到PermaLink表,它來自TargetSegment表。

這是可以實現的嗎?

+0

我可以用聯盟使用不同表格行的標識符獲得相同的結果? – Sourabh 2010-06-11 09:04:00

回答

2

行不是來自一個表或其他。每行都來自您的查詢中的全部表。來自每個表格的相應數據連接在一起形成一個長排。

User.username            -- from User table 

Permalink.perma_link_id          -- from Permalink 
Permalink.locale            -- from Permalink 
Permalink.title            -- from Permalink 
DATEDIFF(CURDATE(), Permalink.created) AS dtdiff    -- from Permalink 

TargetSegment.segment_text         -- from TargetSegment 
TargetSegment.source_segment_id        -- from TargetSegment 
TargetSegment.perma_link_id         -- from TargetSegment 
TargetSegment.created          -- from TargetSegment 
TargetSegment.updated          -- from TargetSegment 
DATEDIFF(CURDATE(), TargetSegment.updated) AS datediff  -- from TargetSegment 

如果參加條件失敗,因爲在表中的一個缺失鍵,該表是在左右表連接或右左表JOIN然後從該表中的所有值將是NULL 。

0

認爲要使用別名,就像這樣:

SELECT `User`.`username` , Permalink.perma_link_id AS p_perma_link_id, Permalink.locale AS p_locale, 
    Permalink.title AS p_title, DATEDIFF(CURDATE() , Permalink.created) AS dtdiff, 
    `TargetSegment`.segment_text, TargetSegment.source_segment_id AS t_source_segment_id, 
    TargetSegment.perma_link_id AS t_perma_link ,TargetSegment.created AS t_created, 
    TargetSegment.updated AS t_updated, DATEDIFF(CURDATE() , 
    TargetSegment.updated) AS datediff 
FROM `users` AS `User` 
RIGHT JOIN perma_links AS `PermaLink` 
    ON (`PermaLink`.`username` = `User`.`username`) 
RIGHT JOIN target_segments AS `TargetSegment` 
    ON (`TargetSegment`.`username` = `User`.`username`) 
RIGHT JOIN source_segments AS `SourceSegment` 
    ON (`SourceSegment`.`source_detail_id` = `PermaLink`.`source_detail_id`) 
LEFT JOIN source_details AS `SourceDetail` 
    ON (`SourceSegment`.`source_detail_id` = `SourceDetail`.`id`) 
WHERE `TargetSegment`.`username` = "xxxx" 
AND `TargetSegment`.`segment_text` <> "" 
AND `Permalink`.`perma_link_id` = `TargetSegment`.`perma_link_id` 
AND `TargetSegment`.`source_segment_id` = `SourceSegment`.`id` 
AND `Permalink`.`source_detail_id` = `SourceDetail`.`id` 
ORDER BY `TargetSegment`.`updated` DESC 
LIMIT 0 , 10 

比你會看到P_爲前綴的永久鏈接,列和其他的與T_