从“两个表”中选择列以及“匹配”。声明

时间:2015-05-13 07:58:17

标签: c# sql sql-server where

我正在为我的网站编写搜索功能,我需要扫描两个表并选择包含我发送的特定字符串的行(使用LIKE)。我写了这个,但它没有发回任何东西。

SqlCommand cmd = new SqlCommand("Select * From Table1, Table2 where Name LIKE '" + searchText + "%' OR Table2 where Name LIKE '" + searchText + "%'", con);

基本上从BOTH表获取具有与我发送的字符串类似的行的所有行。使用' LIKE'

扫描表格的两列,查找我发送的特定字符串

列名称不同:)

这是正确的方法吗?

3 个答案:

答案 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多年来,隐式联合已经不合时宜了 有关隐式和显式连接之间差异的更多信息,请阅读thisthat

我不会给你一个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)

see sql fiddle here

答案 2 :(得分:-1)

试试这个

SqlCommand cmd = new SqlCommand("Select * From Table1 tbl1, Table2 tbl2 where tbl1.Name LIKE '" + searchText + "%' OR tbl2.Name LIKE '" + searchText + "%'", con);