Member 10468587 Ответов: 1

Как изменить приведенный ниже запрос без объединения ?


Я хочу избавиться от Союза, но все равно нуждаюсь в том же наборе результатов.

Я новичок в sql, пожалуйста, помогите.

[EIDT]дублированный контент был удален - Maciej Los [/EDIT]

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

Запрос::

select con.FirstName +' ' +con.LastName as ConsultantName,PositionName,MAX(tm.TsId)  as TsId, (pm.PositionId), tm.FromDate,tm.ToDate from TimesheetMasters tm
          left join PositionMasters pm on tm.PositionId=pm.PositionId
          left join Consultants con on con.ConsultantId=pm.ConsultantId

          where  tm.SubmissionStatus=0 
          --and tm.TsId in ( select MAX( TsId) from TimesheetMasters group by PositionId)
          and convert(date, tm.ToDate) between convert(date, DATEADD(day,-30,GETDATE())) and CONVERT(date, GETDATE())
          and pm.CompanyKeyId=@CompanyKeyId
          group by con.FirstName +' ' +con.LastName,PositionName,tm.TsId,pm.PositionId, tm.FromDate,tm.ToDate
          --order by TsId desc


          union

-- Position created but Timesheet is not submitted till now

select con.FirstName +' ' +con.LastName as ConsultantName,PositionName,null as TsId, pm.PositionId,pm.StartDate, pm.EndDate 
          from PositionMasters pm 
          left join Consultants con on con.ConsultantId=pm.ConsultantId
          where pm.PositionId not in (select PositionId from TimesheetMasters) 
          and pm.CompanyKeyId=@CompanyKeyId
          and convert (date,pm.StartDate) between convert(date, DATEADD(day,-30,GETDATE())) and CONVERT(date, GETDATE())

Suvendu Shekhar Giri

В чем проблема, если вы получаете правильный результат?
Это медленнее, чем ожидалось?

1 Ответов

Рейтинг:
6

jgakenhe

Нет ничего плохого в использовании UNION. Он, вероятно, будет работать быстрее, чем использование логического логического оператора OR, потому что он, скорее всего, будет иметь меньше операций чтения таблиц. Если вы хотите, вы можете попробовать взять верхнюю половину запроса и заменить предложение WHERE приведенным ниже кодом. Я верю, что это сработает, но трудно сказать наверняка без каких-либо данных.

where (tm.SubmissionStatus = 0 OR pm.PositionId not in (select PositionId from TimesheetMasters))


Member 10468587

Это не дает того же результата