Присоединяется и где условия - PullRequest
1 голос
/ 23 ноября 2008

У меня есть следующее (сокращенный запрос):

SELECT 
    `Statistics`.`StatisticID`,
    COUNT(DISTINCT `Flags`.`FlagType`) AS `FlagCount`
FROM `Statistics`
LEFT JOIN `Flags` ON `Statistics`.`StatisticID` = `Flags`.`StatisticID`
WHERE `FlagCount` = 0
GROUP BY `Statistics`.`StatisticID`
ORDER BY `SubmittedTime` DESC
LIMIT 0, 10

Теперь ни FlagCount = 0, ни COUNT(Flags.FlagType) не работают в предложении WHERE. Я думал об использовании SET, но я не уверен, как добавить это к запросу. Есть идеи?

Спасибо

Ответы [ 4 ]

5 голосов
/ 23 ноября 2008

Использование HAVING COUNT(DISTINCT Flags.FlagType) = 0.

2 голосов
/ 23 ноября 2008

Может быть, вы можете попробовать подзапрос, если HAVING не работает.

SELECT 
    `Statistics`.`StatisticID`,
    COUNT(DISTINCT `Flags`.`FlagType`) AS `FlagCount`
FROM `Statistics`
    LEFT JOIN `Flags` ON `Statistics`.`StatisticID` = `Flags`.`StatisticID`
WHERE `Statistics`.`StatisticID`
  IN (SELECT `Flags`.`StatisticID` 
      FROM `Flags`
      HAVING COUNT(DISTINCT `Flags`.`FlagType`) <= 3
      GROUP BY `Flags`.`StatisticID`
  )
GROUP BY `Statistics`.`StatisticID`
ORDER BY `SubmittedTime` DESC
LIMIT 0, 10
0 голосов
/ 23 ноября 2008

@ eed3si9n

Это частично работает - однако мне нужно, чтобы оно было <= 3, что, похоже, не работает. </p>

Кроме того, предложение HAVING выполняется последним, что не даст столько результатов, сколько мне нужно (как установлено LIMIT). Есть ли способ сделать это в предложении WHERE вместо

0 голосов
/ 23 ноября 2008

Попробуйте это:

SELECT 
    `Statistics`.`StatisticID`,
    COUNT(DISTINCT `Flags`.`FlagType`) AS `FlagCount`
FROM `Statistics`
LEFT JOIN `Flags` ON `Statistics`.`StatisticID` = `Flags`.`StatisticID`
                     And `FlagCount` = 0
GROUP BY `Statistics`.`StatisticID`
ORDER BY `SubmittedTime` DESC
LIMIT 0, 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...