2013-09-26 3 views
1

У меня есть три таблицы MySQL: «люди», «люди2id», «места». Первый хранит информацию о людях, где таблица «мест» хранит информацию об их адресах. Средний, «people2id», соединяет эти две таблицы (может быть, у одного человека есть два или более адреса).Смутно об использовании UNION или JOIN

Сейчас необходимо войти в личный профиль и видеть его анкету, но также и его ассоциированные адреса. Я создал этот запрос для этого:

SELECT * FROM people p 
JOIN people2id e ON p.peopleId = e.peopleId 
JOIN places a ON a.peopleId = e.peopleId 
WHERE p.peopleId = number 

Это работает, когда у человека есть связанные адреса (адреса), в противном случае он потерпит неудачу. Я не понимаю, должен ли я использовать какой-либо ПРИСОЕДИНЕНИЕ или использовать СОЮЗ по этому вопросу.

+0

Есть ли какие-либо конкретные причины для создания дополнительных таблиц 'people2id' просто связать можно напрямую связать народы с мест каждое место должно быть people_id –

ответ

4

Изменение JOIN к LEFT JOIN, т.е.

SELECT * FROM people p 
LEFT JOIN people2id e ON p.peopleId = e.peopleId 
LEFT JOIN places a ON a.peopleId = e.peopleId 
WHERE p.peopleId = number 

Использование LEFT JOIN будет включать в себя все записи от people, независимо от того, содержат ли они связанные записи или нет.

+0

Спасибо, я понимаю, LEFT JOIN Сейчас. –

2

UNION используется для получения такого же информаций из двух разных запросов и возвращать их в виде одного набора результатов

РЕГИСТРИРУЙТЕСЬ используются для добавить столбцы и данные в строки (не так просто, но вы можете увидеть это так)

0

Вы должны использовать LEFT JOIN.

SELECT * FROM people p 
JOIN people2id e ON p.peopleId = e.peopleId 
LEFT JOIN places a ON a.peopleId = e.peopleId 
WHERE p.peopleId = number 
+0

Не могли бы вы удалить ссылку w3schools? –

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