2012-04-22 4 views
2

У меня есть таблица людейКак соединить две большие таблицы в одну в MySQL

Name Id   Age Sex Country  
    Ankit ankitgautam24 17 M India 
    John john321  71 M France 
    Will willsmith  42 M USA 
    Arti artisingh  67 F Pakistan 
    .....3.5 million records...... 

И еще одна таблица Ограничение

Country  Sex  Allow 
France   F  Allowed 
France   M  Restricted 
India   F  Restricted 
India   M  Allowed 
Pakistan  F  Restricted 
....for each country ...... 

Теперь я хочу, чтобы преобразовать его в таблицу UserAccount, структура которого должна быть

Name Id   Age Sex Country Allow 
    Ankit ankitgautam24 17 M India Allowed 
    John john321  71 M France Restricted 
    Will willsmith  42 M USA  Allowed 
    Arti artisingh  67 F Pakistan Allowed 
    .....hundreds of thousands of record...... 

Каков правильный запрос для объединения этих двух таблиц в один из самых разумных способов

+0

Таким образом происходит, как много времени? –

+0

Требуется 4 стандартных блока времени. Если серьезно. Ваш вопрос неопровержимо. Это зависит от как минимум дюжины переменных, которые вы не указали (CPU, RAM, размер базы данных, индексы, другая загрузка на сервере и т. Д.). – JohnFx

ответ

3

Что вам нужно это только простой, простой JOIN, и это не займет много времени:

SELECT p.Name, p.Id, p.Age, p.Sex, p.Country, 
     r.Allow 
FROM People p 
INNER JOIN Restriction r ON p.Country = r.Country 

JOIN здесь будет более эффективный способ сделать это, но, чтобы сделать его более эффективным, вместо того, чтобы присоединяться к двум таблицам по имени Country, вам лучше добавить CountryID и присоединиться к ним в этом столбце. Поэтому ваш стол People должен выглядеть так:

  • Name.
  • Id.
  • Age.
  • CountryId Ограничение внешних ключей Restrictions стол (CountryId).

И Restrictions стол:

  • CountryID.
  • IsAllwoed.
0

Вы можете попробовать это так:

SELECT p.Name, 
     p.Id, 
     p.Age, 
     p.Sex, 
     p.Country, 
     r.Allow, 
     r.Country 
from people p, Restriction r 
where r.Country=p.Country 
Смежные вопросы