SQL Server:从2个表中选择

时间:2014-06-10 15:47:37

标签: sql sql-server

我有这个T-SQL语句

select a.CODE 
from MASTER..MASTERADD a, MASTER..MASTER b 
where a.TELO = '18002000047' 
  OR a.MOBILE = '18002000047' 
  AND b.TPIN = '42589' 
  and a.code = b.code

select a.CODE 
from MASTER..MASTERADD a, MASTER..MASTER b 
where a.TELO = '18001147722' 
  OR a.MOBILE = '18001147722' 
  AND b.TPIN = '56783' 
  and a.code = b.code

第一个语句返回1个结果(单行)(CODE)

第二个返回'CODE',但重复大约9000次以上。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

问题是order of operations of the keywords OR and AND

您需要做的是添加一些括号。您很可能正在寻找这种逻辑:

SELECT a.CODE
FROM MASTER..MASTERADD a
JOIN MASTER..MASTER b
    ON a.code = b.code
WHERE (
        a.TELO = '18001147722'
        OR a.MOBILE = '18001147722'
        )
    AND b.TPIN = '56783'

答案 1 :(得分:0)

看来你的语句的WHERE部分需要围绕你的OR括号:

SELECT
    MASTERADD.CODE
FROM
    MASTER..MASTERADD MASTERADD
    INNER JOIN
    MASTER..MASTER MASTER
    ON
        MASTERADD..CODE = MASTER.CODE
WHERE
    (
    MASTERADD..TELO = '18001147722'
    OR
    MASTERADD..MOBILE = '18001147722'
    )
    AND
    MASTER.TPIN = '56783'

但这可能无法解决您的问题。您有两种不同的条件(不同的电话号码和密码),为什么不期望不同的结果呢?

不太重要的是,我建议你清理代码的语法,因为它可以识别问题区域,以后更容易进行逆向工程。