Помогите с оператором SQL - PullRequest
1 голос
/ 05 апреля 2011

У меня есть три таблицы.Давайте назовем их a, b и a_to_b.a_to_b содержит (среди прочего) уникальные идентификаторы из a и b для обеспечения связи между a и b (очевидно).a выглядит примерно так:

a_id, max_b, ...

a_to_b выглядит примерно так:

a_id, b_id, ...

Я хотел бы создать запрос, похожий на:

select a.a_name, a.max_b, a_to_b.(number of times a_id appears in a_to_b) for a, a_to_b where ...

только я не знаю правильных вопросов, чтобы задать Google, чтобы узнать, как это сделать.

Подводя итог, мне не важны отдельные случаи появления b_id в a_to_b, сколько раз появляется a_idв этой таблице.

Надеюсь, в этом было достаточно смысла, чтобы увидеть, чего я пытаюсь достичь.Спасибо за помощь.

РЕДАКТИРОВАТЬ

Теперь, когда я его запустил, я понял, что пропустил часть запроса.

Это полная история.Извините за предыдущее неправильное направление.

таблица A:

group_id
other_stuff

таблица B:

user_id
other_stuff

таблица A_to_B:

group_id
user_id
m_type (int used to determine user's role in the group)

Желаемый вывод:

a.group_id, a_to_b.count(of group_id where m_type=4), b.user_id (user_id from a_to_b from the group_id that was grouped where m_type=2)

Опять прошу прощения за репост.Я должен был быть более осторожным, когда спрашивал в первый раз.Хотелось бы, чтобы я был достаточно знаком с этим материалом, чтобы иметь возможность переводить то, что дал Расика, но я попробовал кучу вещей, и MySQL просто продолжает на меня кричать.

БОЛЬШЕ РЕДАКТИРОВАТЬ

Я немного поэкспериментировал с тем, что написал Расика, и придумал этот беспорядок:

select classes.class_id, classes.spaces - ifnull(dUtC.students,0) as openings, classes.semester_id, dUtC.teacher, users.fname, users.lname from (select teachUtC.class_id as class_id, numUtC.students as students, teachUtC.user_id as teacher from (select class_id, count(*) as students from users_to_classes where participation_level=4 group by class_id) as numUtC right join (select class_id, user_id from users_to_classes where participation_level=2) as teachUtC on teachUtC.class_id=numUtC.class_id) as dUtC, classes, users where users.user_id=dUtC.teacher and dUtC.class_id=classes.class_id

Это работает, но я не могу не думать, что делаю это неправильно ... Я хотел бычтобы узнать, есть ли более чистый способ написать это.

Спасибо

1 Ответ

2 голосов
/ 05 апреля 2011

Вы можете использовать группу по с количеством для генерации этого.

select a.a_name, a.max_b, count(*) as num_a_id from a join a_to_b on a.a_id=a_to_b.a_id group by a_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...