아래의이 스레드에서 읽은 데이터에는 쿼리에서 반환되는 데이터의 차이가 없습니다. 여기에는 조인 후 Where 조건 자 또는 ' 그리고 '나는/어디에서이 변경 될 때, 내 전체 성명에서 인라인 뷰 쿼리를 사용하고 내 쿼리에 다른 행 수를해야합니까 그러나'where'와 'And'in line view join에서의 차이점
description of difference between 'where' and 'And' in join
. 내 in-line 쿼리에서 행 넘버를 사용하면이 문제가 발생하는 것으로 나타났습니다.
내가 이것을 사용하는 이유는 첫 번째 날짜 레코드로만 인라인 쿼리의 레코드를 제한하는 것이므로 외부 쿼리에서 후속이지만 관련 레코드를 반환 할 수 있습니다.
그러나 WHERE를 AND로 변경하면 행 수가 달라집니다.
내 쿼리는 다음과 유사합니다
SELECT DISTINCT
table1.userID,
table2.UniqueID,
table3.entrydate,
table2.entrytime,
table4.changedatestart,
table2.changetimestart,
table5.changedateend,
table2.changetimeend,
table6.leavedate,
table2.leavetime,
table7.nationality_ID,
table8.reg_code
FROM
table1 INNER JOIN table2 ON (table1.t1_KEY=table2.t2_KEY)
RIGHT OUTER JOIN DATETIMETABLE table4 ON (change_start_date_alias.DATEKEY=table2.change_date_start_KEY)
RIGHT OUTER JOIN DATETIMETABLE table5 ON (change_end_date_alias.DATEKEY=table2.change_date_end_KEY)
RIGHT OUTER JOIN DATETIMETABLE table3 ON (entry_date_alias.DATEKEY=table2.ENTRY_DATE_KEY)
RIGHT OUTER JOIN DATETIMETABLE table6 ON (leave_date_alias.DATEKEY=table2.LEAVE_DATE_KEY)
RIGHT OUTER JOIN table7 ON (table7.nat_KEY=table2.nat_KEY)
INNER JOIN table8 ON (table8.reg_DEPT_KEY=table2.reg_DEPT_KEY)
RIGHT OUTER JOIN dbo.table9 ON (table9.leave_KEY=table2.leave_KEY)
INNER JOIN
(SELECT
table1.userID UID,
ROW_NUMBER() OVER (PARTITION BY table1.userID ORDER BY table3.entrydate ASC) as Seq,
table2.UniqueID "Unique_ID",
table3.entrydate "entry_date",
table2.entrytime "entry_time",
table4.changedatestart "change_start_Date",
table2.changetimestart "change Start Time",
table5.changedateend "change End Date",
table2.changetimeend "change End Time",
table6.leavedate "leave Date",
table2.leavetime "leave time",
table7.nationality_ID "Nationality ID",
table8.reg_code "Registration Code"
FROM
table1 INNER JOIN table2 ON (table1.t1_KEY=table2.t2_KEY)
RIGHT OUTER JOIN DATETIMETABLE table4 ON (change_start_date_alias.DATEKEY=table2.change_date_start_KEY)
RIGHT OUTER JOIN DATETIMETABLE table5 ON (change_end_date_alias.DATEKEY=table2.change_date_end_KEY)
RIGHT OUTER JOIN DATETIMETABLE table3 ON (entry_date_alias.DATEKEY=table2.ENTRY_DATE_KEY)
RIGHT OUTER JOIN DATETIMETABLE table6 ON (leave_date_alias.DATEKEY=table2.LEAVE_DATE_KEY)
RIGHT OUTER JOIN table7 ON (table7.nat_KEY=table2.nat_KEY)
INNER JOIN table8 ON (table8.reg_DEPT_KEY=table2.reg_DEPT_KEY)
RIGHT OUTER JOIN dbo.table9 ON (table9.leave_KEY=table2.leave_KEY)
WHERE table3.entrydate BETWEEN '20131201' AND '20140531'
AND table8.reg_DESC In ('Value1','Value2','Value3','Value4','Value5' )
AND table9.leave_CODE IN ('11','15','16','22','25','27','54','57','66')
)b
ON b.UID = table1.userID
**AND b.Unique_ID <> table2.UniqueID**
AND b.Seq = 1
AND b.[Registration Code] = table8.reg_code << If this line is commented out the same row count is returned whether WHERE/AND is used in not equal to ID statement:
AND/WHERE b.Unique_ID <> table2.UniqueID
을하지만 마지막 린을 재 도입하고 WHERE/변경 및 ID 문에 동일하지에 사용 된 것처럼 AND 문을 사용할 때 약간 더 행을 제공합니다 WHERE 술어에 반대합니다.
방금 SQL Server 2005에 추가했습니다. – Andrew
파생 테이블의 일부인 테이블 C를 외부 쿼리에서 참조하고 있으며 파생 테이블 E에 조인하고 있습니다. 나는 이것이 약간의 오류를 발생시키지 않는다고 놀랍지 만, 예기치 않은 결과를내는 것은 놀랄 일이 아니다. 파생 테이블의 선택 목록에 포함시키지 않으면 E는 어떻게 열 f를 갖게됩니까? –
실제 코드를 붙여 넣을 수 있습니까? 이것은 매우 오도하기 쉬운 것입니다. – SouravA