Select语句中的查询条件是否等同于Where子句中的相同条件?

时间:2014-08-14 15:11:26

标签: sql sql-server sql-server-2008 tsql

编辑:我现在意识到我犯了一个愚蠢的错误。在这里清晨,我还没有喝咖啡,不要为这个愚蠢的问题狠狠地鞭打我。如果可以,我会删除它。 主要的脸部时刻家伙。我现在会沉默地走开。

如果我将查询的搜索约束放在Select子句中,如下所示:

select 
ra.TRADE_FIRM, ra.TRADE_OFFICE, ra.TRADE_REP, c.FIRST_NAME, c.MIDDLE_NAME, c.LAST_NAME, 
c.SUFFIX, ca.ADDRESS_LINE_1, ca.ADDRESS_LINE_2, ca.CITY, ca.STATE_PROVINCE, c.EMAIL_ADDRESS, 
c.BUSINESS_PHONE, c.BUSINESS_PHONE_2, rp.CHANNEL, rp.TERR1, rp.TERR1_LOCKED, 
rp.TERR2, rp.CRD_NUMBER, PRIMARY_YN = 'y', RECORD_TYPE = 'I' --here are my constraints

from dbo.CONTACT c
inner join dbo.CONTACT_ADDRESS ca on ca.CONTACT_ADDRESS_ID = c.ADDRESS_1_ID
inner join dbo.REP_PROFILE rp on rp.CONTACT_ID = c.CONTACT_ID
inner join dbo.REP_ALIAS ra on ra.CONTACT_ID = c.CONTACT_ID

它在逻辑上等同于将它们放在Were子句中,如下所示:

select 
ra.TRADE_FIRM, ra.TRADE_OFFICE, ra.TRADE_REP, c.FIRST_NAME, c.MIDDLE_NAME, c.LAST_NAME, 
c.SUFFIX, ca.ADDRESS_LINE_1, ca.ADDRESS_LINE_2, ca.CITY, ca.STATE_PROVINCE, c.EMAIL_ADDRESS, 
c.BUSINESS_PHONE, c.BUSINESS_PHONE_2, rp.CHANNEL, rp.TERR1, rp.TERR1_LOCKED, 
rp.TERR2, rp.CRD_NUMBER

from dbo.CONTACT c
inner join dbo.CONTACT_ADDRESS ca on ca.CONTACT_ADDRESS_ID = c.ADDRESS_1_ID
inner join dbo.REP_PROFILE rp on rp.CONTACT_ID = c.CONTACT_ID
inner join dbo.REP_ALIAS ra on ra.CONTACT_ID = c.CONTACT_ID

where
PRIMARY_YN = 'y' and
RECORD_TYPE = 'I'

我问,因为乍一看,我认为这两个选项是等价的,并且会产生相同的结果。但是每个查询返回的记录总数是不同的,这就是我要问的原因。

1 个答案:

答案 0 :(得分:2)

不,您在SELECT语句中所做的只是一个动态列,其中包含您提供的值,因此对于每条记录,PRIMARY_YN始终是' y'即使表中的值不同。

您可以过滤查询的唯一位置是WHERE子句或JOIN条件。