Intereting Posts

sql left join возвращает

Я пытаюсь запустить левое соединение на 2 таблицы. У меня нет группы, и только там, где условие у меня есть на второй таблице. Но возвращаемые строки меньше, чем первая таблица. не означает ли левое объединение, чтобы привести все данные из первой таблицы? Вот мой SQL:

select * from tbl_a A left join tbl_b B ON A.Cnumber=B.Cnumber and A.CDNUmber=B.CDNumber and abs(A.duration - B.Duration)<2 and substr(A.text,1,3)||substr(A.text,5,8)||substr(A.text,9,2)=substr(B.text,1,8) where B.fixed = 'b580' 

В таблице A содержится 140 000 записей, но результат возвращается менее 100 000 записей. В чем проблема и как я могу ее решить?

Как только вы помещаете условие в WHERE , которое ссылается на правую таблицу и не вмещает NULL которое будет создано, когда соединение не будет выполнено, вы его эффективно преобразите обратно в INNER JOIN .

Пытаться:

 where B.fixed = 'b580' OR B.fixed IS NULL 

Или добавьте это условие в предложение ON для JOIN .

Вы должны добавить предложение where к соединению:

 select * from tbl_a A left join tbl_b B ON A.Cnumber=B.Cnumber and A.CDNUmber=B.CDNumber and abs(A.duration - B.Duration)<2 and substr(A.text,1,3)||substr(A.text,5,8)||substr(A.text,9,2)=substr(B.text,1,8) and B.fixed = 'b580' 

Если вы используете, где statemen, все записи, где b не существует, не будут возвращены.