3

両方のクエリは同じですか? どちらも同じ結果を返しますか?

1)

IF EXISTS(
    SELECT 
        1 
    FROM 
        Users u 
    WHERE 
        u.UPIN = @AttendingDoctorID)
BEGIN
    SELECT 
        u.UserId, 1 
    FROM 
        Users u  WITH(nolock)
    WHERE 
        u.UPIN = @AttendingDoctorID
END ELSE BEGIN
    SELECT
        u.UserId,
        1
    FROM
        Users u (nolock)
    WHERE
        u.FirstName = @AttendingDoctorFirstName AND
        u.LastName = @AttendingDoctorLastName
END

2)

SELECT
u.UserId, 1
FROM
    Users u (nolock)
WHERE
    (u.UPIN = @AttendingDoctorID)
    OR
    (u.FirstName = @AttendingDoctorFirstName AND
    u.LastName = @AttendingDoctorLastName)
4

3 に答える 3

4

それらは同じではありません。

  • 2 番目は、両方の条件のデータを返します。
  • 最初のものは最初にテストし、1 つの条件のみを適用します
于 2011-07-22T08:40:02.177 に答える
2

それらは意味的に同じではありません。(u.UPIN = @AttendingDoctorID)2 番目のクエリは、述語との両方を満たすレコードを返す可能性があります(u.FirstName = @AttendingDoctorFirstName AND u.LastName = @AttendingDoctorLastName)

これが発生するかどうかは、データによって異なります。

于 2011-07-22T08:43:43.863 に答える