比较两个SQL话语

比较两个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)