具有多个表的SQL或语句

时间:2018-01-11 16:44:03

标签: sql sql-server

我是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'

4 个答案:

答案 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'