web-dev-qa-db-fra.com

Jointures internes multiples avec plusieurs tables

J'ai donc quatre tableaux. Chaque table a un identifiant unique pour l'identifiant de table précédent. Ainsi, mon tableau de clics a un identifiant et un identifiant pour l'annonce dont il est issu. Dans le tableau des annonces, il a un identifiant pour l'annonce et un pour la campagne dont il est issu. Voici donc un exemple.

Table4 -
id   company      table_id
11     hp           20
12     Apple        23
13     kohls        26  
14     target       21
15     borders      28

Table3 - 
id    value    table2_id
21     ks          53
22     al          54
23     tx          53 
24     fl          55
25     co          51

Table2 -
id    value    table1_id
51     ks          34
52     al          34
53     tx          33 
54     fl          35
55     co          31

Table1 -
id    value    
31     ks        
32     al          
33     tx          
34     fl          
35     co  

Donc, pour savoir d'où proviennent les valeurs du tableau 4, je dois parcourir chaque table et vérifier leur identifiant. Fondamentalement, je veux savoir quelles valeurs du tableau 1 sont associées aux valeurs du tableau 4.

Il s'agit du tableau 4 en tant que visiteurs d'un site Web et du tableau 1 en tant qu'annonces Internet. Je veux savoir quels visiteurs proviennent de quelles annonces. Malheureusement, les données sont configurées de manière à ce que je ne puisse revenir en arrière que du visiteur à la source, au groupe d'annonces et à l'annonce. Cela a-t-il du sens?

Quoi qu'il en soit, je me demande si l'utilisation de 4 jointures internes était la stratégie optimale pour ce problème ou existe-t-il une solution mysql plus simple que je ne connais pas.

30
ATMathew

Les jointures internes sont probablement la meilleure méthode, et vous n'en avez besoin que de 3.

Cela vous donnera un ensemble de résultats avec deux colonnes: société et valeurs associées.

SELECT Table4.company, table1.id, table1.value
FROM Table1
    INNER JOIN Table2
        ON Table2.table1_id = Table1.id
    INNER JOIN Table3
        ON Table3.table2_id = Table2.id
    INNER JOIN Table4
        ON Table4.table3_id = Table3.id
66
Narnian