Когда я добавляю где в запросе это теперь показывает счетчик 0 - PullRequest
0 голосов
/ 17 декабря 2018

У меня проблема с запросом, который не показывает COUNT 0, когда я добавляю предложение where.

У меня есть две таблицы "Парковка" и "Active_Parking".Я хочу получить COUNT активных парковок за id_parking, что datetime_out равно >=, тогда текущее время сравнивается с parking_space.

Parking
| id_parking     | parking_name | parking_location | parking_space |
| -------------- | ------------ | ---------------- |  ------------ |
| 1              | ABC          |  1st street      | 35            |
| 1              | ABC          |  2nd street      | 50            |
| 1              | ABC          |  3rd street      | 150           |

Active Parking
| id_active_parking   |  id_parking | car_plates | datetime_IN          | 
| ------------------- | ----------- | ---------- | -------------------- |
| 1                   | 1           | 00-XXX-00  | 2018-12-16 14:00:00  |
| 2                   | 1           | 00-XXX-00  | 2018-12-16 14:21:34  |
| 3                   | 2           | 00-XXX-00  | 2018-12-16 21:35:00  |
| 4                   | 2           | 00-XXX-00  | 2018-12-16 22:00:00  |

| datetime_OUT         |
| -------------------- |
| 2018-12-16 15:00:00  |
| 2018-12-16 15:21:34  |
| 2018-12-16 22:35:00  |
| 2018-12-16 23:00:00  |

Запрос:

SELECT
  p.id_parking, 
  p.parking_name,
  p.parking_location,
  p.parking_space, 
  COUNT(ap.id_parking) AS Active
FROM
  parking p
  LEFT JOIN active_parking ap 
    ON ap.id_parking = p.id_parking
WHERE
  ap.datetime_OUT >= '2018-12-16 22:16:00'
GROUP BY p.id_parking

Результат запроса:

| id_parking     | COUNT(ap.id_parking) |
| -------------- | -------------------- |
| 2              | 2                    |

Не отображается id_parking 1 и 3 COUNT = 0

1 Ответ

0 голосов
/ 17 декабря 2018

В чем причина использования LEFT JOIN в этом случае?Удалить группу по + count и проверить результат.Я считаю, что вы должны использовать INNER JOIN в этом случае.Вы можете прочитать о различиях во многих местах, в том числе wiki

Если вам действительно нужен весь список p.id_parking, вам следует переместить предложение WHERE в положение ON:

LEFT JOIN active_parking ap ON (
        ap.id_parking = p.id_parking
    AND ap.datetime_OUT >= '2018-12-16 22:16:00'
)

Тогда у вас должно быть правильное количество активных парковок.

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