【问题标题】:How to search fields using Join?如何使用 Join 搜索字段?
【发布时间】:2019-06-14 18:15:56
【问题描述】:

我有以下列:

Employee Name:

Department:

Designation:

                  Search Button

我想通过连接表来编写搜索查询。 搜索查询将如何?

我只想要一个使用内连接的搜索查询。

我尝试了以下方法:

select e.empname, d.depname,designation 
from employee e  
inner join Department d on e.deptid=d.deptid 
inner join Designation de on de.deid=
where empname LIKe '"+Textbox1.text+'%'"' 
   or depname Like '"+ddldept.SelectedValue+"' 
   or designation Like '"+ddldesignation.SelectedValue+"'

如果我错了,请纠正我。

【问题讨论】:

  • 表格有,而不是字段...
  • @jarlh - 公平地说,它确实取决于您使用的数据库。例如,Ms Access 将列称为字段...
  • 你使用的是什么数据库?
  • 我在 C# 代码中使用过这个查询..
  • @JunRikson..Sql 服务器,但我使用 SqlCommand.. 在 c# 代码中编写了这个查询

标签: c# sql sql-server join


【解决方案1】:

我假设您使用的是 SQL Server。 你的桌子应该是这样的:

Employee { id, deptid, empname }
Department { id, depname }
Designation { id, empid, designation }

select e.empname, d.depname, de.designation 
from Employee e  
inner join Department d on e.deptid = d.id 
inner join Designation de on e.id = de.empid
where e.empname LIKe '%"+Textbox1.text+"%' 
   or d.depname Like '%"+ddldept.SelectedValue+"%' 
   or de.designation Like '%"+ddldesignation.SelectedValue+"%'

实际上这是不好的做法,最好在 c# 中使用参数化查询:

string sql = "select e.empname, d.depname, de.designation " +
    "from Employee e " +
    "inner join Department d on e.deptid = d.id " +
    "inner join Designation de on e.id = de.empid " +
    "where e.empname LIKe '%@empname%' " +
    "   or d.depname Like '%@deptname%' " +
    "   or de.designation Like '%@designation%'"; 

using (SqlConnection connection = new SqlConnection(/* connection info */))
using (SqlCommand command = new SqlCommand(sql, connection))
{
    command.Parameters.AddWithValue("@empname", Textbox1.text);
    command.Parameters.AddWithValue("@deptname", ddldept.SelectedValue);
    command.Parameters.AddWithValue("@designation", ddldesignation.SelectedValue);
    var results = command.ExecuteReader();
}

【讨论】:

  • 嗨,先生..是否必须使用 + like... + " from emplyee e " +.. 编写查询,我可以编写不带 + 和引号的普通查询吗?
  • + 是用于 concat 或添加字符串的 c# 语法。我假设您将表单直接绑定到查询中,这对于避免 sql 注入来说是非常糟糕的做法。我建议您使用我更新的答案中的参数化查询
【解决方案2】:
SELECT Employee.id, Employee.NAME, Department.NAME, Designation.Name FROM Employee
INNER JOIN Department
ON Employee.id = Department.employee_id;
INNER JOIN Designation
ON Employee.id = Designation.employee_id;
WHERE Employee.NAME LIKE '%EmployeeInput%';
WHERE Department.NAME LIKE '%DepartmentInput%';
WHERE  Designation.Name LIKE '%DesignationInput%';

也许这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2015-01-11
    相关资源
    最近更新 更多