1

選択した一連の結果をストアド プロシージャでループし、条件に一致する結果を取り出すにはどうすればよいでしょうか。

ループなどを必要としない場合、どうすればこれを達成できますか?

だから、そのようなselect文があるとしましょう

SELECT DefaultID, Weight, Length, Height, Width FROM tblDefault 
WHERE CustomerID=@CustomerID AND  DeleteDateUTC is null

しかし、基準にも一致する行のみを取得するにはどうすればよいですか

IF SELECT 1 FROM tblOther WHERE CustomerID=@CustomerID AND CustomerUserID=CustomerUserID 
AND DefaultID=@DefaultID returns 1 row 

OR SELECT 1 FROM tblOther WHERE CustomerID=@CustomerID AND DefaultID=@DefaultID returns nothing

tblDefault要するに、ある行またはない行を選択したいのdefaultIDです。tblOtherCustomerUserID defaultIDtblOther

4

2 に答える 2

2

質問に答えるには、存在することを確認してください(質問正しく理解した場合-そうでない場合は、質問を編集してより意味のあるものにしてください)

SELECT d.DefaultID, d.Weight, d.Length, d.Height, d.Width 
FROM tblDefault d
WHERE CustomerID=@CustomerID AND  DeleteDateUTC is null
AND (EXISTS(SELECT 1 FROM tblOther WHERE CustomerID=@CustomerID AND CustomerUserID=@CustomerUserID 
     AND DefaultID=d.DefaultID) 
OR NOT EXISTS(SELECT 1 FROM tblOther WHERE CustomerID=@CustomerID AND DefaultID=d.DefaultID))
于 2013-01-24T02:37:41.970 に答える
2

これはあなたの条件を満たすクエリだと思います:

SELECT DefaultID, Weight, Length, Height, Width
FROM tblDefault td
WHERE CustomerID=@CustomerID AND  DeleteDateUTC is null and
     ( (SELECT count(*)
        FROM tblOther t
        WHERE CustomerID=@CustomerID AND t.CustomerUserID=td.CustomerUserID AND DefaultID=@DefaultID
       ) = 1 or
       not exists (SELECT 1 FROM tblOther WHERE CustomerID=@CustomerID AND DefaultID=@DefaultID)
    )
于 2013-01-24T02:58:58.457 に答える