比较两个SQL语句SELECTstyleidFROMd_sked iINNER JOIN d_skedsub ON i.skedid dbo.d_skedsub.skedidWHER
比较两个SQL语句
SELECT styleid
FROM d_sked i
INNER JOIN d_skedsub ON i.skedid = dbo.d_skedsub.skedid
WHERE styleid IN ( SELECT styleid
FROM dbo.J_style
WHERE styleid IN ( SELECT styleid
FROM dbo.sys_stylepower18ql s
WHERE s.userid = 'Z655'
AND s.access = 1 ) )
AND i.sure > 0
AND ( CONVERT(VARCHAR(10), i.sure_date, 120) BETWEEN DATEADD(year, -1,
'2013-01-01')
AND DATEADD(year, -1,
'2013-10-01') )
OR ( CONVERT(VARCHAR(10), i.sure_date, 120) BETWEEN '2013-01-01'
AND '2013-10-01' )
语句一:得出的结果为4000多条
SELECT a.styleid
FROM dbo.d_sked i
INNER JOIN dbo.d_skedsub a ON a.skedid = i.skedid
INNER JOIN ( SELECT j.styleid
FROM dbo.J_style j
INNER JOIN dbo.sys_stylepower18ql s ON j.styleid = s.styleid
AND s.userid = 'Z655'
AND s.access = 1
) j ON a.styleid = j.styleid
WHERE i.sure > 0
AND ( CONVERT(VARCHAR(10), i.sure_date, 120) BETWEEN DATEADD(year, -1,
'2013-01-01')
AND DATEADD(year, -1,
'2013-10-01') )
OR ( CONVERT(VARCHAR(10), i.sure_date, 120) BETWEEN '2013-01-01'
AND '2013-10-01' )
语句二得出的结果为0条
各位大侠这是什么原因呀。 sql
[解决办法]
其实就是到了某一部就不符合条件,所以为0,你可以一步一步调试:
先看看:
SELECT?j.styleid
?????????????????????FROM???dbo.J_style?j
????????????????????????????INNER?JOIN?dbo.sys_stylepower18ql?s?ON?j.styleid?=?s.styleid
??????????????????????????????????????????????????????????????AND?s.userid?=?'Z655'
??????????????????????????????????????????????????????????????AND?s.access?=?1
和
是不是已经数据不同了
SELECT?styleid
?????????????????????FROM???dbo.J_style
?????????????????????WHERE??styleid?IN?(?SELECT?styleid
?????????????????????????????????????????FROM???dbo.sys_stylepower18ql?s
?????????????????????????????????????????WHERE??s.userid?=?'Z655'
????????????????????????????????????????????????AND?s.access?=?1?)
[解决办法]
两个语句语义不同:
第一条语句中过滤条件有四个,分别用1234表示
1:styleid IN
(
SELECT styleid
FROM dbo.J_style
WHERE styleid IN
(
SELECT styleid
FROM dbo.sys_stylepower18ql s
WHERE s.userid = 'Z655' AND s.access = 1
)
)
2: AND i.sure > 0
3: AND (CONVERT(VARCHAR(10), i.sure_date, 120) BETWEEN DATEADD(year, -1,'2013-01-01')AND DATEADD(year, -1,'2013-10-01') )
4: OR ( CONVERT(VARCHAR(10), i.sure_date, 120) BETWEEN '2013-01-01'AND '2013-10-01' )
语句一:(1 and 2 and 3) or 4
语句二:(1 and 2 and 3) or (1 and 4)
