Как я могу получить mySql для возврата Select JOIN with Count? - PullRequest
2 голосов
/ 03 декабря 2011

У меня проблемы со следующим запросом хранимой процедуры.У меня есть 3 таблицы:

**table: prop_details**
prop_id | prop_title
     1  | sun
     2  | moon
     3  | star
     4  | mars

**table: prop_account**
prop_id | acnt_id
1       | 1
2       | 1
3       | 1
4       | 1

**table: prop_unit**
unit_id | prop_id
    1   | 1
    2   | 1
    3   | 1
    4   | 2
    5   | 2
    6   | 3
    7   | 3
    8   | 3

Я пытаюсь собрать следующие выходные данные в хранимой процедуре:

prop_id     | prop_title    | acnt_id       | unit_count
        1   | sun           | 1             | 3
        2   | moon          | 1             | 2
        3   | star          | 1             | 3
        4   | mars          | 1             | 0

Вот SP, который у меня есть, но он возвращает только 1 строку:

PROCEDURE `NewProc`(IN in_acntID int)
BEGIN
SELECT
  *, COUNT(unit_id) AS unitCount
FROM
  prop_units pu
RIGHT JOIN
  prop_details pd
ON
  pu.prop_id = pd.prop_id
RIGHT JOIN
  prop_account pa
ON pd.prop_id = pa.prop_id
WHERE
  pa.acnt_id = in_acntID;
END;

Я вызываю sp следующим образом: Call selPropertyByAcntID (@cntID) // @ acntID = 1

Ответы [ 2 ]

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

Ваше утверждение выбора должно выглядеть так:

SELECT d.prop_id, d.prop_title, a.acnt_id
   , SUM(CASE
            WHEN u.prop_id IS NOT NULL THEN 1
            ELSE 0
         END) AS UnitCount
FROM #prop_details AS d
INNER JOIN #prop_account AS a ON d.prop_id = a.prop_id
LEFT JOIN #prop_unit AS u ON d.prop_id = u.prop_id
GROUP BY d.prop_id, d.prop_title, a.acnt_id
0 голосов
/ 03 декабря 2011

Попробуйте добавить предложение GROUP BY:

PROCEDURE `NewProc`(IN in_acntID int)
BEGIN
SELECT
  *, COUNT(unit_id) AS unitCount
FROM
  prop_units pu
RIGHT JOIN
  prop_details pd
ON
  pu.prop_id = pd.prop_id
RIGHT JOIN
  prop_account pa
ON pd.prop_id = pa.prop_id
WHERE
  pa.acnt_id = in_acntID
GROUP BY pu.prop_id;
END;
...