2015-12-09 1 views
-1
структуры

Таблица:извлекает различные результаты из таблицы, имеющей один ко многим отношений

Таблица A

ID Имя Кол-во ....

Таблица B

id a_id ...

SQL:

select sum(a.qty) 
from A a inner join B b on a.id=b.a_id; 

Теперь мне нужно, чтобы получить сумму столбца Упак. но который дает повторяющиеся значения. Я знаю, что это можно сделать с помощью внутреннего запроса. Но нужно получить то же самое в одном запросе.

Здесь B имеет много к одному отношение с A. Итак, в запросе sql: выберите a. * Из A внутреннее соединение B b на a.id = b.a_id дает мне дубликаты результатов A. I я пытаюсь получить отличные результаты A в одном запросе

Цените свою помощь. Благодарю.

+0

Я не понимаю, что вы подразумеваете под * повторяющимися значениями *. Не могли бы вы привести конкретный пример? –

+4

Пример данных и желаемых результатов будет более эффективно передавать то, что вы пытаетесь сделать. –

+0

Здесь B имеет много к одному отношение с A. Итак, в запросе sql: выберите a. * Из A a внутреннее соединение B b на a.id = b.a_id дает мне дубликаты результатов A. –

ответ

0

Ваш запрос выглядит эквивалентно просто:

select a_id 
,  sum(qty) qty 
from B 
group by a_id 

Я предполагаю, что вы хотите больше данных от a, в этом случае использование:

select  a.id 
,   b.qty 
from  A a 
inner join (
      select a_id 
      ,  sum(qty) qty 
      from B 
      group by a_id 
      ) b 
     on a.id=b.a_id 
group by a.id 

Помните, что каждый атрибут в избранном должен быть либо в агрегатной функции, либо в group by. mysql позволяет это, если вы этого не сделаете, но это неправильно.

+0

Здесь B имеет много к одной связи с A. Итак, в sql-запросе: выберите a. * из A a inner join B b на a.id = b.a_id дает мне дубликаты результатов A Я пытаюсь получить отличные результаты от A в одном запросе –

+0

Мой второй запрос не должен давать дубликаты, так как мы 'group by' 'B.a_id'. Я повторяю, потому что 'mysql' является странным в агрегатах: каждый выбранный атрибут должен быть либо в агрегатной функции (' sum', 'max' и т. Д.), Либо в' group by'! – HoneyBadger