【发布时间】:2018-10-29 08:34:34
【问题描述】:
我正在运行一个简单的查询,例如
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
Table1(用户 1)
C1: asdfg
C2: qwert
Table3(用户 2)
D1: poiu
D2: trew
Table4(用户 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
【问题讨论】:
-
如果可能的话,我会建议你完全重新设计这个表结构。这是一个非常糟糕的设计,如果你继续这样做,这些只是你将遇到的问题的唯一开始。
-
谢谢,但这不是一个选项,而且这个 kinf od 查询不会每天使用。它会帮助我跟踪很多东西
-
如果不能重新设计表结构,可以使用动态查询
-
您有可以阅读的示例或页面吗?我不是每天都使用 SQL。
-
听起来您的数据建模在某个地方出现了严重错误,数据/元数据有很多不适当的混合。相同“类型”的所有数据,如您想与所有此类数据值进行比较,应该在 single 列中。
标签: sql sql-server dynamic