2008-12-04 7 views
3

J'ai deux tables avec les colonnes suivantes:mysql question se joindre à

Tableau 1:

id, agent_name, ticket_id, category, date_logged 

Tableau 2:

id, agent_name, department, admin_status 

Ce que je suis en train de réaliser est de sélectionner toutes les lignes de table1 où un département d'agents est égal à celui de table2.

J'ai essayé quelques instructions de jointure différentes, mais la syntaxe est incorrecte ou cela ne fonctionnera pas avec cette configuration de table. Je suis un débutant quand il s'agit de MySQL et de ce que j'ai lu JOINs sont à la fin complexe du spectre!

Une autre option que j'ai envisagée est de dupliquer la colonne "département" dans la table1 mais cela nécessitera un peu plus de codage sur le frontend et j'essaie de voir si je peux atteindre le résultat souhaité sans le faire.

Toute assistance grandement appréciée.

+0

+1 pour réinitialiser à 0; Je ne comprends pas pourquoi quelqu'un a déprécié cela? –

+0

Merci à Stein Gauslaa Strindhaug pour le lien très utile, en soulevant ma question ET en fournissant la solution que je cherchais. Je m'excuse si ma première question n'était pas parfaite! – suitedupgeek

Répondre

4

Je ne comprends pas très bien votre question ... Seule table2 a un département, la seule chose en commun est agent_name.

Je ne pense pas que ce que vous voulez vraiment dire est: que vous voulez toutes les lignes de Table1 où l'agent provient d'un certain département, est-ce cela que vous voulez? Dans ce cas, quelque chose comme ça devrait le faire (ne l'ont pas testé si):

SELECT * FROM Table1 
     INNER JOIN Table2 
     ON Table1.agent_name = Table2.agent_name 
     WHERE Table2.department = 'somespecific value'; 

BTW: (Inspirée par ce que quelqu'un d'autre a dit) agent_name sonne comme il est une valeur de chaîne, vous devriez vraiment envisager d'utiliser la id de table2 comme une clé dans la table1 (appelons-le agent_id peut-être) pour les lier ensemble. Les clés étrangères (le lien entre les tables) doivent être un identifiant unique réel. Le ministère devrait également être une clé d'identité. Ensuite, ce serait:

SELECT * FROM Table1 
     INNER JOIN Table2 
     ON Table1.agent_id = Table2.id 
     WHERE Table2.department = 'somespecific value'; 
+0

Spot sur. Merci beaucoup! Je vais maintenant en savoir plus sur JOIN maintenant que j'ai un exemple de travail ... rend la vie beaucoup plus facile que je trouve. – suitedupgeek

1

Check this out, il est le meilleur explaination de sql rejoint je l'ai jamais trouvé: A Visual Explanation of SQL Joins (il est écrit par quelqu'un un a probablement si l'utilisateur entendu parler;) comprendre

0

Bien que je ne peux pas exactement ce que vous avez besoin et comment sont des tables liées, je vais essayer someting similaire:

select 
    a.id, a.agent_name, a.ticket_id, 
    a.category, a.date_logged, b.department 
from 
    table1 a inner join table2 b on b.agent_name=a.agent_name 

Actuellement, je suis en supposant que vous devez lier des tables sur agent_name.

BTW, jointures sont les plus simples extrémité du spectre SQL :)

0

Vous migth voulez ajouter une clé relationnelle unique parmi les deux tables au lieu d'utiliser le nom de l'agent dans les deux. Quelque chose comme ceci:

Table1: id, agent_id, ticket_id, category, date_logged 
Table2: agent_id, agent_name, department, admin_status 

Un exemple SQL:

SELECT t2.agent_name, t1.date_logged FROM table1 t1 
INNER JOIN table2 t2 ON t2.agent_id = t1.agent_id 

Cependant, vous pouvez utiliser une sorte de jointure externe donc je vous suggère de jeter un oeil à certains articles sur Internet.