#mysql #select #composite
#mysql #выберите #составной
Вопрос:
Есть три таблицы, которые выглядят следующим образом:
PersonTable
Person.ID
Person.Name
PersonTypeCompositeTable
Person.ID
PersonType.ID
PersonTypeTable
PersonType.ID
PersonType.Category
Для этого примера допустим, что значения PersonTypeCompositeTable являются:
1,A
2,A
3,B
Как мне написать оператор ВЫБОРА, который вернет всех пользователей с типом PersonType «A»?
ОБНОВЛЕНИЕ: (Опубликована рабочая версия ответа)
SELECT p.*
FROM PersonTable p
INNER JOIN PersonTypeCompositeTable ptc
ON p.ID = ptc.ID
INNER JOIN PersonTypeTable pt
ON ptc.ID = pt.ID
WHERE pt.Category = 'A'
Комментарии:
1. Я не думаю, что это составная таблица. Это просто таблица объединения
2. 1 @Joe Phillips: Вы правы, спасибо! en.wikipedia.org/wiki/Junction_table
Ответ №1:
Вы используете объединения между тремя таблицами.
SELECT p.*
FROM PersonTable p
INNER JOIN PersonTypeCompositeTable ptc
ON p.Person.ID = ptc.Person.ID
INNER JOIN PersonTypeTable pt
ON ptc.PersonType.ID = pt.PersonType.ID
WHERE pt.PersonType.Category = 'A'
Комментарии:
1. 1 @Wes: RTFM самостоятельно… 🙂 … шучу, но на самом деле, я знаю о соединениях целую вечность и все еще не понимаю их, использую их редко — и, как правило, получаю очень легкие очки репутации. Кроме того, он закончил тем, что обновил свой ответ.
2. 1 @Oded: Отправляясь за дверь, я первым делом проверю это утром, когда приду в офис, и выберу это в качестве ответа — или оставлю комментарий. Спасибо!
3. @ошибки — Объединения — это то, с чем вам действительно нужно разобраться, если вы работаете с SQL.
4. 1 @Oded: Я согласен — что вы думаете об этом руководстве: geekyisawesome.blogspot.com/2011/03/sql-joins-tutorial.html — спасибо!!
5. @ошибки — Кажется достаточно приличным.