Таблица SQL, соединяющая другую таблицу - PullRequest
1 голос
/ 11 июля 2011

У меня есть 2 таблицы (основные и категориальные)

основные записи:

categoryCode  field2   field3

1             XXXXXX1  ACTIVE
3             XXXXXX2  ACTIVE
1             XXXXXX3  ACTIVE
1             XXXXXX4  ACTIVE
3             XXXXXX5  ACTIVE
3             XXXXXX5  NOT ACTIVE

классифицируемых записей:

categoryCode        categoryname

1                   categoryname1
2                   categoryname2
3                   categoryname3

Пока у меня есть этот запрос

  SELECT COUNT(*) AS recordcount,
         categoryCode AS catCode,
         categorytable.categoryname
    FROM maintable, 
         categorytable
   WHERE categorytable.categoryCode = maintable.categoryCode 
     AND maintable.field3 = 'ACTIVE'
GROUP BY maintable.categoryCode 
ORDER BY categorytable.categoryCode

со следующим выводом

recordcount catCode categoryname
----------------------------------
3           1       categoryname1
2           3       categoryname3

Но мне нужно что-то вроде этого (категории с 0 записями, включающими 0 записей):

recordcount catCode categoryname
3           1       categoryname1
0           2       categoryname2
2           3       categoryname3

Ответы [ 2 ]

3 голосов
/ 11 июля 2011
SELECT 
    coalesce(COUNT(maintable.categoryCode),0) AS recordcount, 
    categorytable.categoryCode AS catCode, 
    categorytable.categoryname
FROM 
    maintable 
RIGHT JOIN categorytable ON categorytable.categoryCode = maintable.categoryCode 
GROUP BY 
    categorytable.categoryCode, 
    categorytable.categoryname 
ORDER BY 
    categorytable.categoryCode

или с левым соединением

SELECT 
    coalesce(COUNT(maintable.categoryCode),0) AS recordcount, 
    categorytable.categoryCode AS catCode, 
    categorytable.categoryname
FROM 
    categorytable
LEFT JOIN maintable ON categorytable.categoryCode = maintable.categoryCode 
GROUP BY 
    categorytable.categoryCode, 
    categorytable.categoryname 
ORDER BY 
    categorytable.categoryCode
0 голосов
/ 11 июля 2011

Вам нужно использовать левое соединение:

SELECT COUNT(*) AS recordcount, categoryCode AS catCode, categorytable.categoryname
FROM categorytable
LEFT JOIN maintable ON categorytable.categoryCode = maintable.categoryCode 
GROUP BY maintable.categoryCode 
ORDER BY categorytable.categoryCode

Если вы не хотите менять имена таблиц, см. Ответ AlexanderMP.

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