2016-02-09 3 views
0

Я заметил, что когда я использую левое соединение с другой таблицей, мои данные дублируют себя, и у меня нет больше возможностей, чем создание группы, чтобы у меня были правильные строки.Mysql Left Join Force Group

SELECT * from tbla a left join tblb b on a.id=b.id_a 
group by a.id 

Есть ли способ сделать левое соединение возвращением правильных строк без дубликата?

+0

Привет, добро пожаловать в SO. Поймите, что это возможно только потому, что вы используете MySQL, который не следует шаблону ANSI (полностью). a 'select *' с группой, даст вам ошибку в любой другой базе данных. Чтобы правильно ответить на ваш вопрос, вы должны показать нам образец данных, чтобы мы могли понять, почему вы получаете дублированные строки. Если вы присоединитесь к таблице с реестром A с другой таблицей, которая ссылается на A дважды, вы будете иметь дубликат, это нормальное поведение. –

+0

@JorgeCampos это не просто mysql, который поддерживает эту группу по функциональности, sybase и teradata также известны этой функцией. – Shadow

+0

@ Shadow Приятно знать это! Спасибо, Хотя я бы не назвал эту функцию, я бы назвал BAD DESIGN, так как существует единый шаблон для определения языка sql. Но это большая дискуссия. :) –

ответ

0

зависит от ваших данных, вероятно, у вас есть дублированный идентификатор на таблице, поэтому вы создаете дубликаты.

без знать ваши данные у вас есть два варианта

SELECT * 
FROM 
    (
     SELECT DISTINCT <tablA_fields> 
     from tbla a 
    ) as A 
left join  (
     SELECT DISTINCT <tablB_fields> 
     from tblb b 
    ) as B 
tblb b on A.id = B.id_a 

Второй вариант использования group by вместо каждого суб выбора.