我是SQL Server的新手,我的查询无法识别WHERE语句的一部分。我怀疑OR是从多个表(X和Y)中拉出来的。我试着寻找答案而没有找到任何答案。谁能证实这一点?
SELECT
X.ID,
X.FN,
X.LN,
X.SC,
Y.ER,
CONVERT(VARCHAR,Y.LD,101)
FROM X JOIN Y ON X.ID = Y.ID
WHERE (Y.ER <> 240 OR X.EOY <> 240)
AND Y.YR = 2016
AND X.SP LIKE 'T'
答案 0 :(得分:0)
您使用Y作为表别名,但是,它从未被定义过。
SELECT
X.ID,
X.FN,
X.LN,
X.SC,
Y.ER,
CONVERT(VARCHAR,Y.LD,101)
FROM X JOIN ENR Y ON X.ID = Y.ID
WHERE (Y.ER <> 240 OR X.EOY <> 240)
AND Y.YR = 2016
AND X.SP LIKE 'T'
答案 1 :(得分:0)
您没有在from子句中定义Y.看起来ENR是第二个表。您需要将“ENR as Y”或“ENR Y”表示字母Y代表此表。
答案 2 :(得分:0)
你的like子句中需要一个%来表示子串的类型。
SELECT
X.ID,
X.FN,
X.LN,
X.SC,
Y.ER,
CONVERT(VARCHAR,Y.LD,101)
FROM X JOIN ENR ON X.ID = Y.ID
WHERE (Y.ER <> 240 OR X.EOY <> 240)
AND Y.YR = 2016
AND X.SP LIKE 'T%'
这将是以T开头的任何X.SP。
SELECT
X.ID,
X.FN,
X.LN,
X.SC,
Y.ER,
CONVERT(VARCHAR,Y.LD,101)
FROM X JOIN ENR ON X.ID = Y.ID
WHERE (Y.ER <> 240 OR X.EOY <> 240)
AND Y.YR = 2016
AND X.SP LIKE '%T%'
表示任何包含T的X.SP。
如果这不能解决问题,请提供有关问题的更多信息,例如您看到某些记录或者您没有看到任何记录。
答案 3 :(得分:-2)
所以我偶然发现了制作假数据的答案。事实证明我需要在SELECT中添加X.EOY才能在WHERE中识别它。
SELECT
X.ID,
X.FN,
X.LN,
X.SC,
X.EOY,
Y.ER,
CONVERT(VARCHAR,Y.LD,101)
FROM X JOIN Y ON X.ID = Y.ID
WHERE (Y.ER <> 240 OR X.EOY <> 240)
AND Y.YR = 2016
AND X.SP LIKE 'T'