Возникли проблемы с вложенным запросом SQL CE - PullRequest
1 голос
/ 12 декабря 2011

Хорошо, я использую MySQL так долго, что я забыл, насколько проще его использовать, чем MS SQL. У меня проблемы с тем, что должно быть простым вложенным запросом.

У меня есть две таблицы, groups и group_members.

Я пытаюсь выбрать данные из групп и количество записей из group_members, используя groups.id в качестве параметра подзапроса.

Вот запрос, который я использую:

SELECT id AS [Group ID],
       type,
       name,
       (SELECT COUNT(1) FROM group_members WHERE (group_id = [Group ID]) AND (paid = 1)) + '/' + (SELECT COUNT(1) FROM group_members WHERE (group_id = [Group ID]))
FROM groups

Для каждой группы это покажет мне тип, имя и сколько заплатили в дробной форме (т. Е. «6/10»).

Когда я пытаюсь использовать этот запрос в SQL CE, я получаю сообщение об ошибке: «Произошла ошибка при разборе запроса».

Если я запускаю запросы по отдельности, они работают нормально, поэтому я предполагаю, что есть проблема с тем, как SQL CE обрабатывает вложенные запросы, по сравнению с методом MySQL.

Буду признателен за любой совет!

1 Ответ

2 голосов
/ 13 декабря 2011

Для всех, кому было интересно, я наконец смог выполнить это, выполнив левое соединение подзапросов вместо вызова их в главном операторе SELECT.

Вот рабочий запрос:

SELECT grps.group_name,
         CASE
              WHEN members1.paid_count IS NULL
                  THEN 0
              ELSE members1.paid_count
         END AS paid,
         CASE
              WHEN members2.member_count IS NULL
                  THEN 0
              ELSE members2.member_count
         END AS total_members
FROM groups AS grps
LEFT JOIN (SELECT group_id, COUNT(id) AS paid_count FROM group_members WHERE paid = 1 GROUP BY group_id) AS members1 ON grps.id = members1.group_id
LEFT JOIN (SELECT group_id, COUNT(id) AS member_count FROM group_members GROUP BY group_id) AS members2 ON grps.id = members2.group_id
...