2010-09-29 3 views
0

J'ai 2 table première table. employé (clé primaire empid-, empname) par exemple: table des employésBesoin d'aide avec une requête mysql

1 john 

2 martyn 

3 davis 

deuxième documents de table (empid, documentname) par exemple:

1 address.doc 

1 worksheet.doc 

1 salaryslip.doc 

3 address.doc 

chaque employé ont une seule entrée dans la table des employés mais dans la table des documents, zéro ou plusieurs entrées sont insérées pour chaque employé.

Je veux écrire une requête qui donne une sortie représentée ci-dessous

empid empname documentflag 
1 john true 
2 martyn null 
3 davis true 

qui est, si la table de documents ont au moins une entrée pour un employé, puis activer l'indicateur de document correspondant est vrai. sinon, définissez la valeur du document sur Null. est-il un moyen efficace d'utiliser les jointures. Merci à l'avance

+0

Vous pouvez essayer une combinaison de UPDATE et IF NOT NULL ... –

Répondre

2

Vous pouvez faire cela avec un LEFT JOIN pour inclure la table des documents, un GROUP BY de sorte que vous obtenez seulement 1 employé par ligne, et un IF() construire pour sortir les valeurs que vous voulez pour documentflag.

SELECT e.empid, e.empname, IF(d.empid IS NULL, NULL, TRUE) `documentflag` 
FROM employee e 
LEFT JOIN documents d ON (d.empid = e.empid) 
GROUP BY e.empid 
+0

Je pense que cela est plus rapide méthode. merci à tous –

0
SELECT 
    empid, 
    empname, 
    documentFlag 
FROM employee emp 
LEFT OUTER JOIN 
(SELECT doc.empid, count(doc.empid)as documentFlag 
FROM documents doc Group by empid) X 
ON emp.empid = X.empid