VB.Net SQL查询-我试图连接两列,但是遇到了问题

时间:2020-08-01 11:01:28

标签: sql where-clause sql-like sql-in

以下是我要执行的查询。我收到错误消息

ClassItem不是列名。

请让别人知道我在此查询中出了错。

SELECT 
    *, CONCAT([Cabin], [Item]) AS ClassItem 
FROM 
    FQR_RAW_1 AS ClassItem 
WHERE 
    ClassItem IN ('%JCHML - Child Meal%', '%WCHML - Child Meal%', '%YMC - Beef%', '%YMC - Chicken%', '%YMC - Fish / Shellfish%', '%YMC - Pork%', '%YMC - Regional Taste (Non Veg)%', '%YMC - Regional Taste (Veg)%', '%YMC - Vegetarian%')  
    AND [Origin Region] LIKE 'USA%'

2 个答案:

答案 0 :(得分:0)

您不能在同一查询中重复使用别名。一种简单的解决方案是使用子查询:

SELECT r.*
FROM (SELECT r.*, CONCAT([Cabin],[Item]) as ClassItem
      FROM FQR_RAW_1 AS r
     ) r
WHERE ClassItem IN ('%JCHML - Child Meal%', '%WCHML - Child Meal%', '%YMC - Beef%', '%YMC - Chicken%', '%YMC - Fish / Shellfish%', '%YMC - Pork%', '%YMC - Regional Taste (Non Veg)%', '%YMC - Regional Taste (Veg)%', '%YMC - Vegetarian%') AND
      [Origin Region] LIKE 'USA%'

答案 1 :(得分:0)

您不能重用select子句的where子句中定义的列-在这里是ClassItem

另一个问题是您不能将IN与通配符%一起使用,这似乎是您的意图。您可能正在寻找一系列OR条件:

SELECT *, CONCAT([Cabin], [Item]) as ClassItem 
FROM FQR_RAW_1  
WHERE 
    (
           CONCAT([Cabin], [Item]) LIKE '%JCHML - Child Meal%'
        OR CONCAT([Cabin], [Item]) LIKE '%WCHML - Child Meal%'
        OR CONCAT([Cabin], [Item]) LIKE '%YMC - Beef%'
        OR CONCAT([Cabin], [Item]) LIKE '%YMC - Chicken%'
        OR CONCAT([Cabin], [Item]) LIKE '%YMC - Fish / Shellfish%'
        OR CONCAT([Cabin], [Item]) LIKE '%YMC - Pork%', 
        OR CONCAT([Cabin], [Item]) LIKE '%YMC - Regional Taste (Non Veg)%'
        OR CONCAT([Cabin], [Item]) LIKE '%YMC - Regional Taste (Veg)%'
        OR CONCAT([Cabin], [Item]) LIKE '%YMC - Vegetarian%'
    ) 
    AND [Origin Region] LIKE 'USA%'

请注意,我还删除了表别名,该别名实际上在查询中是不需要的,并且与列别名相同-尽管SQL支持,但这有点令人困惑。如果出于某种原因需要为表添加别名,请使用另一个别名。