Оператор выбора в таблице объединения

#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. @ошибки — Кажется достаточно приличным.