2014-02-04 5 views
-1

Таблица 1: - tbl_contactsПолучить данные из нескольких таблиц в MySQL

Поля

user_id 

contact_id 

first_name 

last_name 

Таблица 2: - tbl_phone_details

Поля

contact_id 

phone_number 

phone_type 

Таблица 3: - tbl_email_details

Поля

contact_id 

email_address 

email_type 

QUERY -

SELECT 
     tbl_contacts.*, tbl_email_details.*, tbl_phone_details.* 
FROM 
     tbl_contacts, tbl_email_details, 
     tbl_phone_details 
WHERE 
     tbl_contacts.user_id = '1' 

Я хочу, чтобы получить First_name, last_name, телефона и электронной почты детали конкретного user_id. Я использовал выше запрос, но это дало мне повторные результаты, и у меня меньше знаний о запросах БД, таких как JOIN и INNER QUERY.

Если у кого есть идеи, пожалуйста, любезно помогите.

ВЫХОД ТРЕБУЕТСЯ: -

contact_id, first_name, last_name, phone_number, PHONE_TYPE, email_address, EMAIL_TYPE (Здесь адрес электронной почты и номер телефона может иметь 1 или несколько значений для отдельных пользователей).

ответ

1

Попробуйте как этот

Если вы хотите получить данные для конкретного ID

SELECT T.contact_id, 
     T.first_name, 
     T.last_name, 
     P.phone_number, 
     P.phone_type, 
     E.email_address, 
     E.email_type 
FROM tbl_contacts T LEFT JOIN tbl_phone_details P ON 
        T.contact_id = P.contact_id 
        LEFT JOIN tbl_email_details E ON 
        T.contact_id = E.contact_id 
WHERE T.contact_id = @contact_id 

Если вы хотите, чтобы получить все данные

SELECT T.contact_id, 
     T.first_name, 
     T.last_name, 
     P.phone_number, 
     P.phone_type, 
     E.email_address, 
     E.email_type 
FROM tbl_contacts T LEFT JOIN tbl_phone_details P ON 
        T.contact_id = P.contact_id 
        LEFT JOIN tbl_email_details E ON 
        T.contact_id = E.contact_id 
0

ВЫБОР tbl_contacts. *, Tbl_email_details. *, Tbl_phone_details. * FROM tbl_contacts, tbl_email_details, tbl_phone_details ГДЕ tbl_contacts.user_id = '1'

Вы забыли упомянуть условие, с помощью которого вы собираетесь присоединиться все столы!

SELECT c.first_name, c.last_name, p.phone_number, e.email_address 
FROM tbl_contacts c, tbl_email_details e, tbl_phone_details p 
WHERE tbl_contacts.user_id = '1' 
AND c.contact_id = e.contact_id 
AND e.contact_id = p.contact_id; 
0

это, как я хотел бы сделать этот запрос с JOIN ... но там могут быть некоторые лучше или быстрее способ сделать это.

SELECT first_name, last_name, phone_number, email_address 
FROM tbl_contacts 
JOIN tbl_phone_details 
    ON tbl_contacts.contact_id=tbl_phone_details.contact_id 
JOIN tbl_email_details 
    ON tbl_email_details.contact_id=tbl_contacts.contact_id 
WHERE tbl_contacts.user_id = '1'; 

И только так вы не заблудиться во всех различных ответов здесь (которые, вероятно, все правильно):

  • вам не нужно дать имя aliase к столам (это просто для удобочитаемости)
  • Вам не нужно указывать имена таблиц в списке столбцов, если имя столбца уникально (например, first_name находится только в tbl_contacts).Просто, если вы хотите contact_id, тогда вы должны решить, какой из них (например, tbl_phone_details.contact_id)
  • многопозиционный выбор, предложенный Jayaram, точно такой же, как JOIN. MySQL обрабатывает как запросы точно так же (я просто не видел его ответ, когда я ответил, извините)
0
SELECT c.contact_id, c.first_name, c.last_name, 
    phone.phone_number, phone.phone_type, 
    email.email_address, email.email_type 
FROM tbl_contacts c 
    LEFT JOIN tbl_email_details email ON c.contact_id = email.contact_id 
    LEFT JOIN tbl_phone_details phone ON c.contact_id = phone.contact_id 
WHERE tbl_contacts.user_id = '1' 
0

Sql запросы легко узнать и писать, и они очень полезны в получении важных данных база данных. Joins используются для получения данных из двух или более таблиц на основе общего столбца в обеих таблицах.
Inner Join выберет те значения, которые являются общими в обеих таблицах.
Left Join выберет все данные из левой таблицы, а Right Join выберет все данные из правой таблицы на основе идентификатора.
Это основы SQL, и вы должны знать, как получить точные данные, используя их.

Смежные вопросы