2009-12-14 5 views

Répondre

6

Vous pouvez écrire que, avec une jointure comme:

SELECT * 
FROM jobs j 
JOIN advertisers a 
ON  a.advertiser_id = j.advertiser_id 
+2

Notez que l'étoile ('SELECT *') est pour la brièveté de la réponse et vous devez indiquer encore chaque colonne sélectionnée dans votre application (comme vous le faites dans votre question - 'SELECT j.job_id AS job_name, ...'). – soulmerge

1
SELECT j.job_id, j.name AS job_name, a.name AS advertiser_name, j.time_added, j.active, j.moderated from 
jobs j join advertisers a 
on a.advertiser_id = j.advertiser_id 
+2

Comment cela fonctionne-t-il sans spécifier quelles tables extraire les données 'FROM'? – random

+0

Ah, faute de frappe !! D'une façon ou d'une autre, le 'from' et le' on' ont disparu quand j'ai appliqué le formulaire – Graviton

+0

Vous devriez pouvoir les ajouter en éditant votre réponse. – peacedog

2

précisiez SE JOINT voici des exemples de couple:

Votre exemple est un INNER JOIN cependant, vous "notation de joint implicite" utilisée ici est la manière explicite de noter ceci:

SELECT j.job_id, j.name AS job_name, a.name AS advertiser_name, 
j.time_added, j.active, j.moderated 
FROM jobs j 
    INNER JOIN advertisers a 
    ON j.advertiser_id = a.advertiser_id 

Selon votre résultat souhaité, vous pouvez choisir d'utiliser un OUTER JOIN à la place. La différence par rapport à un INNER JOIN étant que INNER JOIN ne trouvera que les enregistrements ayant un enregistrement correspondant dans l'autre table. Inversement, l'utilisation d'un OUTER JOIN vous permet de spécifier si vous voulez que les enregistrements de votre table des jobs ou de votre table d'annonceurs apparaissent s'ils n'ont pas d'enregistrement correspondant dans l'autre table.

Dans cet exemple, la requête trouvera tous les enregistrements de la table d'emplois indépendamment d'un match dans le tableau des annonceurs:

SELECT j.job_id, j.name AS job_name, a.name AS advertiser_name, 
j.time_added, j.active, j.moderated 
FROM jobs j 
    LEFT OUTER JOIN advertisers a 
    ON j.advertiser_id = a.advertiser_id 

Cependant, cette requête, trouvera tous les enregistrements de la table des annonceurs indépendamment d'une correspondance dans la table de l'emploi:

SELECT j.job_id, j.name AS job_name, a.name AS advertiser_name, 
j.time_added, j.active, j.moderated 
FROM jobs j 
    RIGHT OUTER JOIN advertisers a 
    ON j.advertiser_id = a.advertiser_id 

gauche ou à droite correspond au quel côté de la « = » la table est en marche.

A PLEIN OUTER JOIN renvoie tous les enregistrements de chaque table indépendamment des matches:

SELECT j.job_id, j.name AS job_name, a.name AS advertiser_name, 
j.time_added, j.active, j.moderated 
FROM jobs j 
    FULL OUTER JOIN advertisers a 
    ON j.advertiser_id = a.advertiser_id 
Questions connexes