2010-03-23 11 views
1

Je veux calculer combien de connexions uniques à partir de 2 (ou probablement plus de tables).MySQL, fusionnant 2 tables ou plus avant d'exécuter la requête SELECT DISTINCT?

J'ai essayé ceci:

SELECT count(distinct(l1.user_id)) 
FROM `log_1` l1 
LEFT JOIN `log_2` l2 
ON l1.userid = l2.userid; 

Mais il me donne le résultat de l1. Si je n'ai pas mis l1 sur li.userid (distinct), il a dit "ambigu".

Comment puis-je combiner la table, puis sélectionner une connexion unique de la table combinée?

EDIT:

Testé: Je teste le nombre (distinct (l1.userid)) et le nombre (distinct (l2.userid)). Cela me donne un résultat différent

+0

Pouvez-vous définir ce que vous entendez par "combiner la table"? Voulez-vous que les utilisateurs apparaissent dans l'une ou l'autre des tables? Utilisateurs apparaissant dans les deux tableaux? Autre chose? –

+0

@ Mark Byers: Je pense que ce serait plus précis, si les utilisateurs apparaissent sur les deux tables à droite? Il faut vraiment beaucoup de temps pour combiner 4 tables, plus de 2 minutes, et j'attends encore maintenant. (En utilisant mon code ci-dessus, changez le LEFT JOIN à INNER JOIN) – mysqllearner

Répondre

1

Si vous utilisez LEFT JOIN alors vous obtiendrez au moins une ligne dans le résultat combiné pour chaque ligne de l1, donc la jointure est totalement inutile si vous voulez juste un nombre distinct. Cela vous donne le même résultat que votre requête:

SELECT count(distinct(l1.user_id)) 
FROM `log_1` l1 

Peut-être que vous voulez un INNER JOIN ou UNION à la place? Un UNION comptera un utilisateur s'il apparaît dans l'une des tables. Un INNER JOIN ne les comptera que s'ils apparaissent dans les deux tables. Voici un exemple du UNION:

SELECT count(*) FROM (
    SELECT distinct(user_id) FROM `log_1` 
    UNION 
    SELECT distinct(user_id) FROM `log_2` 
) T1