MySQL Subquery Question - PullRequest
       5

MySQL Subquery Question

1 голос
/ 14 июля 2011

У меня есть запрос, чтобы получить общее число для данного идентификатора издателя. Я хотел бы использовать его как подзапрос, чтобы я мог перебирать все идентификаторы издателя.

Мой рабочий запрос для данного идентификатора:

SELECT SUM( d.our_cost ) 
FROM articles a
CROSS JOIN domains d ON a.domain_id = d.id
    AND d.publisher_id =  '1094'

Я хотел бы получить эту цифру для всех идентификаторов в таблице издателя p, где d.publisher_id = p.id

Пока я пробовал следующее безрезультатно:

SELECT p.id, p.contact_name, p.contact_email, 
    (SELECT SUM(d.our_cost)
     FROM articles a
     CROSS JOIN domains d ON a.domain_id = d.id and d.publisher_id = p.id) total
FROM publishers p

Конкретная ошибка, которую я получаю: Неизвестный столбец 'p.id' в 'предложении'

Ответы [ 3 ]

1 голос
/ 14 июля 2011

Я думаю, что вы должны изменить свой запрос и поместить подзапрос в предложение from, что-то вроде этого:

SELECT p.id, p.contact_name, p.contact_email, total.total_cost
FROM 
  (
  SELECT SUM(d.our_cost) as total_cost, d.publisher_id 
  FROM articles a CROSS JOIN domains d ON a.domain_id = d.id ) total 
JOIN publishers p on total.publisher_id = p.id
0 голосов
/ 14 июля 2011

кажется, что здесь удобнее было бы группировать

Также кажется, что вам вообще не нужна таблица статей (если у вас нет дополнительных бизнес-правил)

SELECT p.id, p.contact_name, p.contact_email, IFNULL(SUM(d.our_cost),0) AS total
  FROM publishers p
  LEFT JOIN domains d ON d.publisher_id = p.id
 GROUP BY p.id
0 голосов
/ 14 июля 2011

Я предполагаю, что вы получили ошибку о вашем синтаксисе, попробуйте:

SELECT p.id, p.contact_name, p.contact_email, SUM(d.our_cost) as total
FROM articles a
     CROSS JOIN domains d ON a.domain_id = d.id 
     JOIN publishers p ON d.publisher_id = p.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...