web-dev-qa-db-ja.com

「サブクエリにEXISTSが導入されていない場合、選択リストに指定できるのは1つの式のみ」エラーを修正する方法

MS SQL 2012 Expressで次のクエリを実行しようとしています。

Select (
    Select Id, Salt, Password, BannedEndDate
    from Users
    where username = '" + LoginModel.Username + "'
), (
    Select Count(*)
    From LoginFails
    where username = '" + LoginModel.Username + "'
    And IP = '" + Request.ServerVariables["REMOTE_ADDR"] + "')"
);

しかし、次のエラーが表示されます。

サブクエリにselectが導入されていない場合、EXISTSリストには1つの式のみを指定できます。

この問題を解決するにはどうすればよいですか?

14
Jamie

これを試して:

 Select 
    Id, 
    Salt, 
    Password, 
    BannedEndDate, 
    (Select Count(*) 
        From LoginFails 
        Where username = '" + LoginModel.Username + "' And IP = '" + Request.ServerVariables["REMOTE_ADDR"] + "')
 From Users 
 Where username = '" + LoginModel.Username + "'

また、SQLインジェクション攻撃によるセキュリティリスクを回避するために、クエリでパラメータを使用することを強くお勧めします。

お役に立てば幸いです!

7
mortb

これを試してください-

"SELECT 
       ID, Salt, password, BannedEndDate
     , (
          SELECT COUNT(1)
          FROM dbo.LoginFails l
          WHERE l.UserName = u.UserName
               AND IP = '" + Request.ServerVariables["REMOTE_ADDR"] + "'
      ) AS cnt
FROM dbo.Users u
WHERE u.UserName = '" + LoginModel.Username + "'"
7
Devart