2009-08-17 5 views
1

J'ai 2 lignes de données dans une base de données mysql. Les deux lignes sont identiques à l'exception d'une colonne. Ce que je cherche est une requête qui produira une seule ligne avec les deux valeurs distinctes. Quelqu'un peut-il m'aider s'il vous plaît?Puis-je prendre les résultats de deux rangs et les combiner en un?

Un exemple des données est:

1 Administrator Test 2009-08-17 03:57:35 
1 Miller   Test 2009-08-17 03:57:35 

Ce que je dois est ceci:

1 Administrator Miller Test 2009-08-17 03:57:35 

DISTINCT ne me le donner. J'ai besoin de la colonne supplémentaire ajouté ou ajouté à l'ensemble de résultats.


Ceci est le code que j'essaie d'utiliser.

SELECT 
t2.msg_id, 
t3.lname AS sender, 
t4.lname AS recipient 
FROM 
mail_message AS t1 
Inner Join mailbox AS t2 ON t1.msg_seq = t2.msg_seq 
Inner Join employee AS t3 ON t3.employee_id = t2.employee_id 
INNER JOIN employee AS t4 ON t3.employee_id = t4.employee_id 
+0

Qu'est-ce que vous essayez d'accomplir exactement? Il peut y avoir une meilleure approche que de forcer votre ensemble de résultats à être une seule ligne. – Nelson

Répondre

4

Sure. Vous pouvez JOIN la table sur une copie de lui-même, avec une technique quelque chose comme ceci:

SELECT t1.*, t2.name 
FROM the_table AS t1 
INNER JOIN the_table AS t2 ON (t1.id = t2.id AND t1.test = t2.test AND t1.date_column = t2.date_column AND t1.name < t2.name) 

nous nommons arbitrairement Voici une copie de la table t1 et l'autre t2 et rejoindre les lignes qui sont identiques, sauf pour le nom.

Notez que je ne fais pas simplement un test != sur le name, car cela se traduirait par deux lignes correspondantes: celui où Administrator est en t1 et l'autre où Administrator est en t2. Pour distinguer une table identique de l'autre, j'affirme que t1 sera toujours celui avec un nom «plus petit» (c'est-à-dire, alphabétiquement plus tôt).

S'il peut y avoir trois lignes identiques ou plus, cela fonctionnera toujours, mais retournera plusieurs correspondances. Par exemple, si A, B et C sont tous les noms en lignes par ailleurs identiques, vous obtiendrez:

A B 
B C 
A C 
+0

Salut Votey, merci pour l'excellent exemple et l'explication. Je vais essayer de réécrire cette requête en tant que telle. Je rapporterai avec ce que je trouve. Merci encore. –

+0

Salut Votey. Es-tu toujours là? Je ne peux pas faire fonctionner ça. –

+0

Eh bien, on dirait que vous avez renversé. Je vais vous donner le crédit pour cette réponse parce que je suis certain que cela fera ce dont j'ai besoin. Je vais continuer à travailler dessus. Merci Votez. –

Questions connexes