回答

收藏

是否像在所有列上一样应用而不指定所有列名称?

技术问答 技术问答 247 人阅读 | 0 人回复 | 2023-09-14

我发现自己处于一个不熟悉的数据库中的位置,该数据库的每个表都有大量的列。我对要查找的数据有所了解,但我不知道该数据位于哪一列中并需要使用like它来定位所需的确切数据(并且必须针对多组数据重复执行此任务)7 ^' }" ~4 A1 {9 ?
% |! k. [1 V& {
有没有办法像笛卡尔选择一样应用?/ g) M3 @: \9 i$ p" F
以下内容将说明我想做的更好的一点(即使在语法上很荒谬):
# }# g, ]( x" w9 F: pselect ! O) l) h: j* q9 d
    ** e. j" a  [; T
from    7 F$ o1 J  C, \$ O( k) ~7 r! ]2 n* q
    a_table6 `" N* W8 f6 V( a
where   
$ T  f* t& u+ w( N. J    * like '%x%'
! @( c* ^6 o  z编辑8 A& L0 g" z$ f
请注意,我无意在任何报告中使用直角坐标选择-此处的目的是帮助我确定需要放入查询中的相关列,并帮助我熟悉数据库。
8 B! P, ]7 k5 p5 T9 k- L/ [* Z4 V               
, s5 b$ M) F; R, }解决方案:
9 e! X! y+ K2 i3 t               
' [9 s4 f5 ~, R! x& F) J$ X" {% S" u- P: a0 y
# V- W) f" o( X. H
                通常-不可能以合理的方式来实现( 不挖掘数据库元数据 ),但是,如果您知道列的名称,则可以使用如下技巧:
9 i  q4 _  l& |' }select
% U7 _5 D4 C# Y$ b0 L! T    YourTable.** Q5 v5 M/ E% _
FROM YourTable/ R; M$ N+ k+ p: N4 _
JOIN$ g( ^) U2 _  t8 |  Q
(   \9 }0 c! S" B: k+ Q$ B5 ~
    select & [4 X% l* A( I& A9 p0 H7 ?
      id, ( U+ |- m# x0 J9 l7 d$ h
      ISNULL(column1,'')+ISNULL(Column2,'')+...+ISNULL(ColumnN,'') concatenated6 {( \+ g0 u4 t6 k/ U  X1 M! d/ S! {
      FROM YourTable, \5 P$ T3 w! `  b6 f
) T ON T.Id = YourTable.Id
; l' k- n: j5 ]where   t.concatenated like '%x%'
# u  N; J! o8 |, x0 |  G或者
5 c1 F- S, c' Z- Y+ M6 a) ?/ K1 n" x如果您搜索单词,请使用FTS功能,因为较高的查询是 性能的杀手
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则