2009-11-30 7 views
0

J'ai deux tables et une table de référence pour la requête. Toute suggestion ou aide serait grandement appréciée.mysql select dans deux tables

table1

user_id username  firstname  lastname  address 
    1  john867  John   Smith   caloocan 
    2  bill96  Bill   Jones   manila 

table2

user_name_id username  firstname  lastname  address  designation 
    1    jakelucas  Jake   Lucas   caloocan  employee 
    2    jadejones  Jade   Jones   Quezon   student 
    3    bong098  Bong   Johnson   pasig   employee 

table de référence

ref_id username  friend_username 
    1  tirso   bill96 
    2  tirso   jadejones 
    2  tirso   bong098 

la sortie doit aimer ce

user_id user_name_id  username  firstname  lastname  address  designation 
    2       bill96   Bill   Jones   manila 
      2    jadejones  Jade   Jones   Quezon   student 
      3    bong098   Bong   Johnson   pasig   employee 

Répondre

1

Étant donné que des requêtes de syndicalisation décentes ont déjà été publiées, je parlerai un peu de votre conception de base de données.

Je prendrais certainement ce que IronGoofy dit sérieusement en considération avant que vous preniez trop de temps à chercher à joindre ces tables ensemble. Il semble que vous ayez beaucoup de données en double à gérer avec vos tables, et que cela pourrait devenir incontrôlable assez rapidement si cela devait se produire.

Je pense que vous devriez probablement essayer de séparer vos données afin que les informations importantes puissent être liées sur l'id_utilisateur.

Ainsi, par exemple, vous pourriez avoir quelques tables ici ...

User Information Table: 
--------- 
User_id 
Username 
First Name 
Last Name 
Address 
Designation_id 

Friend Link Table: 
--------- 
Friend_link_id 
User_id  
Friend_user_id 

Designation Table: 
--------- 
Designation_id 
Designation_name 

Ainsi, plutôt que de lien sur votre nom d'utilisateur dans tous les sens, vous simplement rejoindre sur les différents les ID. Un peu plus propre et manquant le problème de données en double que vous aviez avant l'OMI. Espérons que cela aide ...

+0

+1 pour regarder le design plutôt que la requête – edosoft

1

Pouvez-vous essayer quelque chose comme ça

SELECT [table1].[USER_ID], 
     NULL user_name_id, 
     [table1].username, 
     [table1].firstname, 
     [table1].lastname, 
     [table1].address, 
     NULL designation 
FROM reference_table INNER JOIN 
     table1 ON [reference_table].friend_username = [table1].username 
UNION 
SELECT NULL USER_ID, 
     [table2].user_name_id, 
     [table2].username, 
     [table2].firstname, 
     [table2].lastname, 
     [table2].address, 
     [table2].designation 
FROM reference_table INNER JOIN 
     table2 ON [reference_table].friend_username = [table2].username 
0

Ce n'est pas tout à fait clair ce que vous essayez d'atteindre, mais voici une supposition:

SELECT user_id, NULL as user_name_id, username, ... 
FROM ref_tab r join table1 t1 on r.friend_username = t1.username 
WHERE r.ref_id = 1 
UNION 
SELECT NULL as user_id, user_name_id, username, ... 
FROM ref_tab r join table1 t2 on r.friend_username = t2.username 
WHERE r.ref_id = 2 

Mais j'aurais un regard à la conception DB et réfléchissez à quelques améliorations ...