Вложенный SQL-запрос

У меня есть следующие таблицы:

Клуб: Club_ID | Название | Дата_Создания | ...

Club_Intesect: User_ID | Club_ID | Доступ

Я пытаюсь выбрать переменное количество клубов и присоединиться к идентификатору пользователя с самым высоким доступом в этом клубе. Это лицо считается собственником.

Итак, если в клубе 100 есть участники A, B, C с доступом 3, 4 и 5 соответственно: я хочу, чтобы окончательный запрос выбирал из клуба:

 Club.Club_ID     Club.Title        Club.Created_Date  Club_Intersect.User_ID

      100         |  "Test Club"   |  "Creation Date"     |       C             |
      101         | "Test Club 2"  |  "Creation_Date"     | Highest Access User |
      ...

person pws5068    schedule 03.10.2010    source источник
comment
Здесь много путаницы. В ваших результатах используются Club.Date и Club_Intersect.Owner_ID, ни один из которых не существует в ваших таблицах. Вы запрашиваете самый высокий доступ, но выбираете пользователя с самым низким (3 ‹ 5) в своем образце вывода...   -  person D'Arcy Rittich    schedule 03.10.2010
comment
Столбцы таблицы примера не очень хорошо соответствуют столбцам результатов запроса. Ни Club.Date, ни Club_Intersect.Owner_ID не определены.   -  person Jonathan Leffler    schedule 03.10.2010
comment
Извините, вы оба правы, я был неосторожен. Теперь это должно иметь больше смысла.   -  person pws5068    schedule 03.10.2010
comment
Можно ли предположить, что есть только один пользователь с максимальным доступом?   -  person Thomas    schedule 03.10.2010


Ответы (2)


SELECT * FROM Club c
JOIN Club_Intesect ci ON ci.Club_ID = c.Club_ID
WHERE ci.Access = (SELECT MAX(Access) FROM Club_Intesect WHERE Club_ID = c.Club_ID)

Не проверял, но вы поняли

person colithium    schedule 03.10.2010
comment
Поскольку желаемый результат равен 3, а не 5, вам, вероятно, нужно MIN, а не MAX. - person Jonathan Leffler; 03.10.2010
comment
... Я думаю, что желаемый результат - максимальный доступ (5). - person colithium; 03.10.2010
comment
На самом деле это 5, извините за оригинальную опечатку. - person pws5068; 03.10.2010
comment
Все в порядке, его много редактировали, и я тоже немного запутался - person colithium; 03.10.2010

SELECT * FROM Club WHERE CLUB_ID = (SELECT Club_ID FROM Club_Intersect ORDER BY Access DESC LIMIT 1);

Я думаю, что это сработает для выбора нужного клуба с помощью вложенного SQL-запроса. Вы не указали, что вы хотите получить в возвращаемых результатах, потому что этот запрос будет извлекать только столбцы Club.

person chustar    schedule 03.10.2010