Ошибка с оператором соединения

0

У меня возникли проблемы с пониманием кода ошибки. Я хватаю имя клиента из таблиц клиентов, тогда я хочу захватить cid, где ставка из таблицы веток, затем я пытаюсь сгруппировать branch_services.sid и services.sid по ставке в таблице branch_services поэтому я могу найти, что клиенты в таблице сервисов имеют плату за услуги больше 2000.

select cname from clients where cid in 
(select cid from branches where bid in (select branches_services.sid, services.sid 
from branches_services, services 
where branches_services.sid=services.sid group by bid having sum(sfee) >= 2000));

ОШИБКА 1241 (21000): Операнд должен содержать 1 столбец (ов)

  • 1
    Подсказка: у вас есть подзапрос, который возвращает более одного столбца.
  • 0
    Вы должны выбрать один столбец, который соответствует cid, в этой части "select branch_services.sid, services.sid"
Показать ещё 1 комментарий
Теги:

1 ответ

0
Лучший ответ

Один из ваших подзапросов возвращает два столбца, но вы используете только одно значение, чтобы проверить, найдено ли оно в паре возвращаемых значений. Вот:

....bid in (select branches_services.sid, services.sid 
from branches_services, services ...

Таким образом, при условии, что таблица branches_services имеет bid столбца, запрос должен быть:

select cname from clients 
where cid in 
(select cid from branches 
   where bid in 
    (select branches_services.bid from branches_services join services 
     on branches_services.sid=services.sid 
     group by bid
     having sum(sfee)>=2000));
  • 0
    select cname from clients where cid in (select cid from branches where bid in (select branches_services.bid from branches_services, services where branches_services.sid = services.sid group by bid having sum(sfee) >= 2000)); Это работает также @cdaiga
  • 0
    Да, но используйте внутреннее соединение для лучшей производительности.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню