我正在运行一个简单的查询,例如
DECLARE @find varchar(60) = 'findme';
SELECT *
FROM Queue
WHERE
column1 LIKE '%' + @find + '%' OR
column2 LIKE '%' + @find + '%' OR
column3 LIKE '%' + @find + '%' OR
....
这仅告诉我每个列中'findme'字符串所在的每个条目。 现在的问题是,“ ColumnExtra”中的字符串将始终是一个字符串,其中包含另一个表的名称(如可以在此处找到其他信息),而“ ColumnName”则包含当前用户的ID。
我还需要在“ ColumnName”表(针对给定的“ ColumnName”用户)中搜索“ findme”,并且对于每次匹配,无论是在原始表中还是在“ ColumnName”表中,或者在这两者中,我需要两个可能的表中的所有信息。
例如:
原始表
User 1 2 3
-----------------------------------------
Column1: string1 string1 string3
Column2: string1 string2 string3
Column3: findme string2 string3
ColumnExtra: table1 table3 table4
ColumnName: uid1 uid2 uid3
表1(对于用户1)
C1: asdfg
C2: qwert
表3(对于用户2)
D1: poiu
D2: trew
表4(对于用户3)
E1: aaaaaa
E2: findme
SQL查询应返回以下结果:
User 1 3
--------------------------------
Coulmn1: string1 string3
Coulmn2: string1 string3
Coulmn3: findme string3
CoulmnExtra: table1 table4
CoulmnName: uid1 uid3
C1: asdfg
C2: qwert
E1: aaaaa`enter code here`a
E2: findme
如果不可能这样,那么下一个最佳解决方案就是
User 1 3
Column1: string1 string3
Column2: string1 string3
Column3: findme string3
ColumnExtra: table1 table4
ColumnName: uid1 uid3
C1: asdfg whateverishere
C2: qwert whateverishere
E1: whatev aaaaaa
E2: whatev findme
答案 0 :(得分:0)
这个评论太长了。
您的数据结构有问题。您可以通过创建所有表的视图来解决此问题:
create view all_referenced_tables as
select 'table1' as table_name, c1 as col1, c2 as col2 from table1 union all
select 'table2', d1, d2 from table2 union all
select 'table3', e1, e2 from table3;
然后,您可以在查询中使用它:
SELECT q.*
FROM Queue q LEFT JOIN
all_referenced_tables art
ON q.column_extra = art.table_name
WHERE q.column1 LIKE '%' + @find + '%' OR
q.column2 LIKE '%' + @find + '%' OR
q.column3 LIKE '%' + @find + '%' OR
art.column1 LIKE '%' + @find + '%' OR
art.column2 LIKE '%' + @find + '%'