2010-06-11 4 views
1

J'ai une requête SQL ci-dessousdifférenciant les résultats de sql droit rejoindre

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 

Ce SQL est des résultats corrects pour aller chercher me.I veulent identifier de quelle table chaque ligne si de, pour être précis qui résultat est dû à la table PermaLink et qui provient de la table TargetSegment.

est-ce réalisable?

+0

puis-je utiliser syndicat obtenir le même résultat avec un identifiant pour différentes lignes de table? – Sourabh

Répondre

2

Les lignes ne proviennent pas d'une table ou de l'autre. Chaque ligne provient de toutes les tables dans votre requête. Les données correspondantes de chaque table sont réunies pour former une longue rangée.

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 

Si la condition de jointure échoue en raison d'une clé manquante dans l'une des tables et que la table est la table de droite dans une jointure gauche ou la table de gauche dans un RIGHT JOIN toutes les valeurs de cette table seront NULL .

0

Je pense que vous voulez utiliser les alias, comme ceci:

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 

Que vous verrez les permalien colonnes préfixées avec p_ et les autres avec t_