Как получить результат из группы запросов по SQL без возврата дубликата - PullRequest
0 голосов
/ 27 августа 2018

У меня есть 3 таблицы, которые объединятся в 1 таблицу.

table1

id|prdct_name|qty
001     A      5
002     B      5
003     C      5

table2

id|prdct_id|price
 1    001    100
 2    001    200
 3    002    150
 4    002    250

Таблица3

id|prdct_id|stock_in|stock_out
 1   001      5           0
 2   001      10          0
 3   002      15          0
 4   002      25          0

Я пробовал этот sql (обновлен из-за опечатки)

select a.prdct_name as Name, a.qty as QTY,b.price as PRICE, c.stock_in as SIN,c.stock_out as SOUT
from table1 a 
left join table2 b on a.id=b.prdct_id 
left join table3 c on a.id=c.prdct_id
where 1=1 group by b.id,c.id

но результат возвращает дубликат как эта таблица

NAME|QTY|PRICE|SIN|SOUT
 A    5   100   5    0
 A    5   100   10   0
 A    5   200   5    0
 A    5   200   10   0
 B    5   150   15   0
 B    5   150   25   0
 B    5   250   15   0
 B    5   250   25   0 

результат должен быть

 NAME|QTY|PRICE|SIN|SOUT
 A    5   100   5    0
 A    5   200   10   0
 B    5   150   15   0 
 B    5   250   25   0 

есть ли способ удалить дубликат вопроса? пытаться с отчетливым тоже не поможет. Спасибо

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

измените свой ключ соединения, это должно быть id = product_id, но вы пытаетесь с именем & product_id

select a.prdct_name as Name, a.qty as QTY,b.price as PRICE, c.stock_in as SIN,c.stock_out as SOUT
from table1 a 
left join table2 b on a.id=b.prdct_id 
left join table3 c on a.id=c.prdct_id
where 1=1 group by b.id,c.id
0 голосов
/ 27 августа 2018

Вы можете использовать ключевое слово SQL DISTINCT для выбора не повторяющихся строк.

Пример:

SELECT DISTINCT
  prdct_name as NAME,
  qty as QTY,
  price as PRICE,
  stock_in as SIN,
  stock_out as SOUT
FROM
  table1 a
INNER JOIN
  table2 b ON a.id=b.prdct_id
LEFT JOIN
  table3 c ON b.id=c.id
GROUP BY
  a.id, c.id

Рабочая SQL скрипка

Подробнее о DISTINCT здесь .

0 голосов
/ 27 августа 2018

Похоже, что ваш второй join должен быть на id - и ваши join условия все равно выглядят неправильно.

select a.prdct_name as Name, a.qty as QTY, b.price as PRICE, c.stock_in as SIN,c.stock_out as SOUT
from table1 a left join
     table2 b
     on a.id = b.prdct_id left join
     table3 c 
     on a.id = c.id
where 1=1
group by b.id, c.id
...