2008-11-23 4 views
1

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

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, но я не уверен, как добавить это в запрос. Есть идеи?

Спасибо,

ответ

2

Возможно, вы можете попробовать подзапросы, если 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 
5
+0

Блестящий - спасибо! – Ross 2008-11-23 11:29:08

+0

А это работает только с = 0 - есть ли способ заставить его работать с <= 3, например? – Ross 2008-11-23 11:56:53

0

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

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 
0

@ eed3si9n

Это частично работает - однако мне это нужно, чтобы быть < = 3, который, кажется, не работает.

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

+0

Просьба показать, что именно вы пытались, и сказать, как это не работает. http://dev.mysql.com/doc/refman/5.0/en/select.html: «Предложение HAVING применяется почти последним, незадолго до отправки элементов клиенту, без оптимизации. (LIMIT применяется после HAVING.) « – ysth 2008-11-23 15:18:14

Смежные вопросы