红色部分是报错部分,

Im_root 2018-02-05 11:51:28
Select count(*) as recordcount from t_Animal ta
left join t_Farmer tf on tf.FNumber=ta.FFarmerNumber
left join t_Company cm on cm.FNumber=ta.FCompanyNumber
where charindex('545000015014523',isnull(tf.fnumber,'' )
or (isnull(tf.fname,'')
or (isnull(ta.flabelnumber,'')>0


本来条件是: Where cm.FCity ='百色市' and tf.FName like '%545000015014523%' or tf.FNumber like '%545000015014523%' or ta.flabelnumber like '%545000015014523%'是可以执行的
...全文
439 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2018-02-05
  • 打赏
  • 举报
回复
+ ',' 这个你可以不考虑,这个的目的是把 3 个字段用逗号分隔,避免出现两个字段都不满足,但拼在一齐满足条件的情况
zjcxc 2018-02-05
  • 打赏
  • 举报
回复
sql server 不支持你写的那个, 可以用这个
 where charindex('545000015014523',
	isnull(tf.fnumber,'' )+ ',' +
	isnull(tf.fname,'')+ ',' +
	isnull(ta.flabelnumber,'' ))>0
Im_root 2018-02-05
  • 打赏
  • 举报
回复
使用模糊查询速度很慢,在oracle中使用 where instr(nvl(a, '')||nvl(b,'')||nvl(c,''), 'xx') > 0 这种方法可以变快很多,我想应用在sqlserver中,但总是报错,谁知道改怎么改嘛。我账号分数只有一点了,抱歉。希望各位多多指教
吉普赛的歌 2018-02-05
  • 打赏
  • 举报
回复
SELECT FNumber
INTO #tf 
FROM t_Farmer tf
WHERE tf.FName LIKE '%545000015014523%'
       OR  tf.FNumber LIKE '%545000015014523%'
CREATE CLUSTERED INDEX ix_tf ON #tf(FNumber)

SELECT FCompanyNumber 
INTO #ta
FROM t_Animal ta
WHERE ta.flabelnumber LIKE '%545000015014523%'
CREATE CLUSTERED INDEX ix_ta ON #ta(FCompanyNumber)

SELECT COUNT(*)             AS recordcount
FROM   #ta ta
       LEFT JOIN #tf tf
            ON  tf.FNumber = ta.FFarmerNumber
       LEFT JOIN t_Company cm
            ON  cm.FNumber = ta.FCompanyNumber
WHERE  cm.FCity = '百色市'

DROP INDEX ix_tf ON #tf
DROP INDEX ix_ta ON #ta
看下改成这样之后, 能不能快起来?
zjcxc 2018-02-05
  • 打赏
  • 举报
回复
引用 5 楼 wzf0703 的回复:
[quote=引用 2 楼 zjcxc 的回复:] sql server 不支持你写的那个, 可以用这个
 where charindex('545000015014523',
	isnull(tf.fnumber,'' )+ ',' +
	isnull(tf.fname,'')+ ',' +
	isnull(ta.flabelnumber,'' ))>0
报错是不会了,但是查询不出来结果了,本来是有记录的[/quote] 那你把 + ',' 去掉吧,你原来是没有这个意思的,另外,你可以把这个查出来看看数据对不对 isnull(tf.fnumber,'' ) + isnull(tf.fname,'')+ isnull(ta.flabelnumber,'' )
二月十六 2018-02-05
  • 打赏
  • 举报
回复
引用 6 楼 wzf0703 的回复:
[quote=引用 4 楼 sinat_28984567 的回复:]
SELECT  COUNT(*) AS recordcount
FROM    t_Animal ta
        LEFT JOIN t_Farmer tf ON tf.FNumber = ta.FFarmerNumber
        LEFT JOIN t_Company cm ON cm.FNumber = ta.FCompanyNumber
WHERE   CHARINDEX('545000015014523', ISNULL(tf.fnumber, '')) > 0
        OR CHARINDEX('545000015014523', ( ISNULL(tf.fname, '') )) > 0
        OR CHARINDEX('545000015014523', ( ISNULL(ta.flabelnumber, '') )) > 0
这个我试过了,跟原来的方法速度,开销都是差不多的,并没有多大变化[/quote] 我以为你是淡出的想解决红色报错问题呢
Im_root 2018-02-05
  • 打赏
  • 举报
回复
引用 4 楼 sinat_28984567 的回复:
SELECT  COUNT(*) AS recordcount
FROM    t_Animal ta
        LEFT JOIN t_Farmer tf ON tf.FNumber = ta.FFarmerNumber
        LEFT JOIN t_Company cm ON cm.FNumber = ta.FCompanyNumber
WHERE   CHARINDEX('545000015014523', ISNULL(tf.fnumber, '')) > 0
        OR CHARINDEX('545000015014523', ( ISNULL(tf.fname, '') )) > 0
        OR CHARINDEX('545000015014523', ( ISNULL(ta.flabelnumber, '') )) > 0
这个我试过了,跟原来的方法速度,开销都是差不多的,并没有多大变化
Im_root 2018-02-05
  • 打赏
  • 举报
回复
引用 2 楼 zjcxc 的回复:
sql server 不支持你写的那个, 可以用这个
 where charindex('545000015014523',
	isnull(tf.fnumber,'' )+ ',' +
	isnull(tf.fname,'')+ ',' +
	isnull(ta.flabelnumber,'' ))>0
报错是不会了,但是查询不出来结果了,本来是有记录的
二月十六 2018-02-05
  • 打赏
  • 举报
回复
SELECT  COUNT(*) AS recordcount
FROM    t_Animal ta
        LEFT JOIN t_Farmer tf ON tf.FNumber = ta.FFarmerNumber
        LEFT JOIN t_Company cm ON cm.FNumber = ta.FCompanyNumber
WHERE   CHARINDEX('545000015014523', ISNULL(tf.fnumber, '')) > 0
        OR CHARINDEX('545000015014523', ( ISNULL(tf.fname, '') )) > 0
        OR CHARINDEX('545000015014523', ( ISNULL(ta.flabelnumber, '') )) > 0

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧