代码之家  ›  专栏  ›  技术社区  ›  D.Trump123

从具有不同值的多个表列中选择

  •  0
  • D.Trump123  · 技术社区  · 7 年前

    我正在尝试创建一个搜索按钮,该按钮可以过滤一个表中的多个表列,我有三个单独的代码可以搜索特定表列上的数据(LastName、FirstName和DriverID):

    SqlConnection Con = new SqlConnection();
    Con.ConnectionString = "Data Source=PC-PC\\MIKO;
                            Initial Catalog=Caproj;
                            Integrated Security=True;";
    Con.Open();
    string qry = "select LastName from [Driver Table] where LastName=@id";
    SqlCommand cmd = new SqlCommand(qry, Con);
    cmd.Parameters.AddWithValue("@id", slastname.Text);
    cmd.ExecuteNonQuery();
    SqlDataAdapter da2 = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    da2.Fill(dt);
    if (dt.Rows.Count > 0)
     {
      MessageBox.Show("Valid Input");
     }
    else
    {
     MessageBox.Show("Invalid Input");
    }
    

    有没有一种方法可以让我同时搜索它们,而不需要为每个都创建单独的过滤器?大致如下:

    SELECT LastName, FirstName, DriverID 
    FROM [Driver Table] 
    WHERE LastName=@id 
      AND FirstName=@id 
      AND DriverID=@id
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   marc_s    7 年前

    我不确定这是否是你需要的。 但此查询将返回 1. 3列中存在id时的值。

    SELECT  
        CASE WHEN EXISTS (SELECT * FROM [Driver Table] WHERE LastName = @id) 
                THEN 1 
             WHEN EXISTS (SELECT * FROM [Driver Table] WHERE FirstName = @id) 
                THEN 1 
             WHEN EXISTS (SELECT * FROM [Driver Table] WHERE DriverID = @id) 
                THEN 1 
             ELSE 0 
        END
    
        2
  •  0
  •   Gordon Linoff    7 年前

    如果我理解正确,你不就是想 or :

    SELECT LastName, FirstName, DriverID 
    FROM [Driver Table] 
    WHERE LastName = @id OR
          FirstName = @id OR
          DriverID = @id;
    

    或者,更简单地说:

    SELECT LastName, FirstName, DriverID 
    FROM [Driver Table] 
    WHERE @id IN (LastName, FirstName, DriverID);