#mysql
#mysql
Вопрос:
У меня есть 2 таблицы:
clients_db
| clnt_id | clnt_sid | usr_sid | clnt_name |
| 1 | 12345678 | 10001 | Peter |
| 2 | 87654321 | 10001 | Mikey |
aircon_client_db
| ac_id | clnt_sid |
| 1 | 12345678 |
| 2 | 12345678 |
| 3 | 12345678 |
| 4 | 87654321 |
| 5 | 87654321 |
Это запрос:
select *,count(air.ac_id) as nAC
from clients_db clnt
left join aircon_client_db air on air.clnt_sid=clnt.clnt_sid
where clnt.usr_sid=?
group by clnt.clnt_sid
order by clnt.clnt_name asc
Из приведенного выше кода. Я ожидаю результат clnt_id[1]=3
и clnt_id[2]=2
. Но результат возвращается 0
для всех. Где я должен исправить?
Ответ №1:
Вам просто нужно выбрать count(air.ac_id)
.
Также замените clnt.usr_sid=?
на clnt.clnt_id=?
, если вы собираетесь ожидать результата, подобного clnt_id[1]=3
.
select count(air.ac_id) as nAC
from clients_db clnt
left join aircon_client_db air on air.clnt_sid=clnt.clnt_sid
where clnt.clnt_id=?
group by clnt.clnt_sid
order by clnt.clnt_name asc
Вам не хватает clnt_name
столбца as в вашем вопросе?
Комментарии:
1. Да, я забыл этот столбец, теперь исправлено! Но все еще не работает. Это не подсчитывается; (
2. Пожалуйста, посмотрите этот пример, основанный на вашем db-fiddle.com/f/gy4GHUUbZQRqHdKfDEJaVR/0 , отправленный мной запрос работает так, как ожидалось.
3. Но когда я изменил причину
where clnt.usr_sid=10001
… ошибка!4. Вы можете упорядочивать только по столбцам, появляющимся в
GROUP BY
предложении или агрегатах. Действительно ли порядок по полезен для вас?5.
order by
Здесь на самом деле не имеет значения. Но как только я его удалю. Ничего не меняется;(
Ответ №2:
Не используйте *
, но явное имя столбца или в этом случае вы также можете использовать clnt.*
(вам не нужно значение для таблицы с левым присоединением, а только count(*)
select clnt.clnt_id, clnt.clnt_sid ,count(air.ac_id) as nAC
from clients_db clnt
left join aircon_client_db air on trim(air.clnt_sid)=trim(clnt.clnt_sid)
AND trim(clnt.user_sid)= '10001'
group by clnt.clnt_sid
order by clnt.clnt_name asc
Комментарии:
1. ответ уже обновлен .. добавить .псевдоним имени таблицы clnt.cln_sid
2. Похоже, мне нужно добавить ко всему столбцу префикс
clnt
или у меня ошибка :'Column 'clnt_sid' in field list is ambiguous'
3. Кстати, после того, как я поставил
clnt
впереди. Это все еще не учитывается, как ожидалось. : (4. к какому типу данных относятся столбцы cln_sid в обеих таблицах
5. может быть, ваш входной параметр не соответствует значению столбцов для соединения, которое не соответствует