次のステートメントの内部選択をフィルター処理すると、データのみが返されるクエリの最後に到達しようとしています。
作品:
SELECT * FROM
(
SELECT
[szPhoneNo] Email
,ROW_NUMBER() OVER (PARTITION BY CLID ORDER BY t_clientphone.PhoneType_Id ASC) AS Seq
FROM [SLacsis_SLM].[dbo].[T_ClientPhone] t_clientphone INNER JOIN
[SLacsis_SLM].[dbo].[TL_PhoneType] PT ON t_clientphone.PhoneType_ID = PT.PhoneType_ID
WHERE t_clientphone.szPhoneNo LIKE '%reg28%'
) T where T.Seq = 1 --AND Email LIKE '%reg28%'
(10 行が返されます)
動作しません:
SELECT * FROM
(
SELECT
[szPhoneNo] Email
,ROW_NUMBER() OVER (PARTITION BY CLID ORDER BY t_clientphone.PhoneType_Id ASC) AS Seq
FROM [SLacsis_SLM].[dbo].[T_ClientPhone] t_clientphone INNER JOIN
[SLacsis_SLM].[dbo].[TL_PhoneType] PT ON t_clientphone.PhoneType_ID = PT.PhoneType_ID
--WHERE t_clientphone.szPhoneNo LIKE '%reg28%'
) T where T.Seq = 1 AND Email LIKE '%reg28%'
(0 行が返されます)
2番目のクエリで行が返されない理由と、それを回避できる方法があるかどうかを誰かが説明できますか?
および列が一意でないROW_NUMBER
場合、それは非決定的であることを知っています(これは、内部選択のいくつかの行の場合です)。PARTITION BY
ORDER BY
当面の間、一時テーブルを使用して問題を再現できるかどうかを確認します。