Проблема подзапроса - PullRequest
       0

Проблема подзапроса

0 голосов
/ 16 февраля 2011

У меня есть две таблицы, подобные этой

Участник и его покупки

Мне нужен вывод, как это

Member_ID | CountofProducts

(и значение продукта не должно быть 0, а статус покупки = 1)

SELECT     
    MemberName,
    (SELECT COUNT(*) AS Count
     FROM dbo.Purchases 
     WHERE MemberName = dbo.Members.MemberName
       AND Res_Status = 1) AS Count 
FROM   
   dbo.Members

Я могу получить их общее количество CountofPurchased Products из приведенного выше запроса, но мне нужно избегать их count=0, как это сделать?

Ответы [ 2 ]

4 голосов
/ 16 февраля 2011

Вы можете попробовать что-то вроде

SELECT  m.MemberName, 
        COUNT(p.*) Cnt 
FROM    Members m INNER JOIN 
        Purchases p     ON  m.MemberName = p.MemberName 
WHERE   p.Res_Status = 1 
GROUP BY    m.MemberName

Нет необходимости в предложении HAVING, так как INNER JOIN исключит все записи в участниках, у которых нет покупок.

1 голос
/ 16 февраля 2011
SELECT   m.MemberName, COUNT(p.*) AS CountOfProducts
FROM     Members m
INNER    JOIN Purchases p ON m.MemberName = p.MemberName
WHERE    p.Res_Status = 1
GROUP BY m.MemberName
HAVING   COUNT(p.*) > 0

Я думаю, что выше будет делать то, что вы хотите. Ключевым моментом является то, что вам, вероятно, даже не нужен ваш подзапрос, но вы можете обработать запрос (возможно, с большей эффективностью), просто используя соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...