我正在为我的网站编写搜索功能,我需要扫描两个表并选择包含我发送的特定字符串的行(使用LIKE)。我写了这个,但它没有发回任何东西。
SqlCommand cmd = new SqlCommand("Select * From Table1, Table2 where Name LIKE '" + searchText + "%' OR Table2 where Name LIKE '" + searchText + "%'", con);
基本上从BOTH表获取具有与我发送的字符串类似的行的所有行。使用' LIKE'
扫描表格的两列,查找我发送的特定字符串列名称不同:)
这是正确的方法吗?
答案 0 :(得分:2)
如果确认两个表具有相同的列,则可以使用此查询;
Select * From Table1
where Name LIKE '" + searchText + "%'
UNION ALL
Select * From Table2
where Name LIKE '" + searchText + "%'
答案 1 :(得分:2)
您的代码中存在多个问题。
严重性中的第一个是您使用字符串连接而不是parameters 这使您的代码非常容易受到SQL injection attacks.
的攻击第二个是你的SQL完全错误
您正在使用没有任何连接条件的隐式连接
这会产生一个cross join,但我不确定这是你想要的
始终使用显式连接。即from t1 inner join t2 on(t1.id = t2.id)
。
20多年来,隐式联合已经不合时宜了
有关隐式和显式连接之间差异的更多信息,请阅读this和that
我不会给你一个SQL建议,因为它不是很清楚什么是期望的结果,但如果你想写一个好的代码,你必须考虑我所考虑的点。
<强>更新强>
根据您的意见,您可以执行以下操作:
declare @Name varchar(10)='as'
SELECT Table1.*, Table2.*
FROM (
SELECT t1_Id As Id, 1 As TableNumber
FROM Table1
WHERE t1_Name LIKE @Name+'%'
UNION ALL
SELECT t2_Id as Id, 2 As TableNumber
FROM Table2
WHERE t2_Name LIKE @Name+'%'
) SearchResults
LEFT JOIN Table1 ON(t1_Id = Id AND TableNumber = 1)
LEFT JOIN Table2 ON(t2_Id = Id AND TableNumber = 2)
答案 2 :(得分:-1)
试试这个
SqlCommand cmd = new SqlCommand("Select * From Table1 tbl1, Table2 tbl2 where tbl1.Name LIKE '" + searchText + "%' OR tbl2.Name LIKE '" + searchText + "%'", con);