Несколько внутренних объединений с несколькими таблицами - PullRequest
28 голосов
/ 22 августа 2011

Итак, у меня есть четыре стола. Каждая таблица имеет один идентификатор для предыдущего идентификатора таблицы. Таким образом, в моей таблице кликов есть идентификатор и идентификатор объявления, из которого оно пришло. В таблице объявлений он имеет идентификатор для объявления и один для кампании, из которой он был. Итак, вот пример.

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  

Итак, чтобы выяснить, откуда взялись значения в таблице 4, мне нужно вернуться к каждой таблице и проверить, какой у них идентификатор. В основном, я хочу знать, какие значения в таблице 1 связаны со значениями в таблице 4.

Это таблица 4 в качестве посетителей веб-сайта и таблица 1 в качестве интернет-рекламы. Я хочу знать, какие посетители пришли с какой рекламы. К сожалению, данные настроены так, что я могу сделать только один шаг назад от посетителя к источнику, от группы объявлений к объявлению. Имеет ли это смысл?

В любом случае, мне интересно, было ли использование 4 внутренних соединений оптимальной стратегией для этой проблемы или есть какое-то более простое решение mysql, о котором я не знаю.

1 Ответ

63 голосов
/ 22 августа 2011

Внутренние объединения, вероятно, лучший метод, и вам нужно только 3.

Это даст вам набор результатов с двумя столбцами: компания и связанные значения.

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
...