JPunyon прав. Сначала необходимо выполнить тот или иной запрос, а затем обрезать его результаты по факту.
Если вы посмотрите на запросы как написанные, внешний запрос должен знать результат внутреннего запроса, чтобы применить его условие where. Однако при указании
where np.partner_id = p.partner_id
во внутреннем запросе, то вы пытаетесь заставить внутренний запрос узнать результат внешнего запроса, чтобы применить его предложение where. Это круговая зависимость.
Как человек, вы можете прочитать запрос и сказать, что в данном конкретном случае вы запрашиваете одно конкретное значение в предложении where во внешнем запросе и просите использовать это же значение в внутренний запрос, поэтому кажется, что база данных должна увидеть это и использовать то же буквальное значение из внешнего запроса.
На самом деле внутренний запрос просто выполняется первым, не зная возможных значений p.partner_id
, отсюда и ошибка «несколько строк».