Ali Khan Ответов: 1

Как избежать дублирования записей в SQL-соединениях


у меня есть таблица biodata, которая имеет более 20 строк, но здесь она показывает только 4 строки записей ??

Что я уже пробовал:

SELECT  DISTINCT    
  d1.emp_code,
  d1.emp_name, 
  dbo.Setup_designation.des_name, 
  dbo.Setup_Department.Depart_name, 
  dbo.Transaction_Employee.joining_date, 
  dbo.Employee_Salary_Increment.current_salary, 
  d3.type, 
  d3.amount, 
  d2.r_casual_leave, 
  d2.r_sick_leave, 
  d2.r_annual_leave, 
  d2.r_extra_leave, 
  d2.others_leave
FROM         
  dbo.Employee_Biodata d1 
  INNER JOIN dbo.Transaction_Employee ON d1.Emp_bio_id = dbo.Transaction_Employee.Emp_bio_id 
  INNER JOIN dbo.Setup_designation ON dbo.Transaction_Employee.des_id = dbo.Setup_designation.des_id 
  INNER JOIN dbo.Setup_Department ON dbo.Transaction_Employee.Department_id = dbo.Setup_Department.Department_id 
  INNER JOIN dbo.Employee_Salary_Increment ON d1.Emp_bio_id = dbo.Employee_Salary_Increment.Emp_bio_id 
  INNER JOIN dbo.Loan_Issue d3 ON d1.Emp_bio_id = d3.Emp_bio_id 
  INNER JOIN dbo.Leave_issue d2 ON d1.Emp_bio_id = d2.Emp_bio_id where d1.Emp_bio_id = d3.Emp_bio_id and d1.Emp_bio_id = d2.Emp_bio_id 

RickZeeland

Мы можем только догадываться, если у нас нет данных, пожалуйста, добавьте примерные данные, например скрипт с CREATE TABLE, INSERT INTO statements.
Или еще лучше: создайте онлайн-пример на http://sqlfiddle.com/

Ali Khan

ладно

1 Ответов

Рейтинг:
9

W∴ Balboos, GHB

Без ваших данных мне придется гадать.

Вы используете внутреннее соединение - что означает, что никакая запись не возвращается, если она не может найти совпадение. Поэтому очень часто возвращают меньше, чем все ваши строки, особенно с таким количеством соединений, каждое из которых потенциально может устранить некоторые строки.

Вместо этого вы должны использовать LEFT JOIN или RIGHT JOIN в соответствующих местах, что вернет NULL для несопоставимых записей - но вернет их все. Используйте ISNULL (), если вы хотите иметь значение, отличное от NULL для несоответствий.

Теперь, особенно без каких-либо таблиц для просмотра, я не мог бы предложить, какие соединения следует изменить и каким должен быть их квалификатор ON, чтобы сделать правильное совпадение. Очень важно, чтобы вы связали таблицу правильными полями.

Вышеизложенное основано на вашем вопросе, а не на вашей теме.