Mysql where子句中的SQL-Case

Mysql where子句中的SQL-Case,mysql,sql,Mysql,Sql,我得到了下面的sql问题,我认为这对我来说是行不通的。我知道最后一个CASE行是错误的,但我想在where子句中使用这样的CASE语句 简要描述我的情况: 我有好几家公司,他们都有自己的材料与companyID联系在一起。每种材料都可能链接到pricelist_条目中的一行。如果我在pricelist_entries表中搜索链接到多个物料行的一行,则将返回所有行,但我只想返回属于当前公司的行,即执行搜索的公司。 结论:如果materialID不为空,则materials.company=curr

我得到了下面的sql问题,我认为这对我来说是行不通的。我知道最后一个CASE行是错误的,但我想在where子句中使用这样的CASE语句

简要描述我的情况: 我有好几家公司,他们都有自己的材料与companyID联系在一起。每种材料都可能链接到pricelist_条目中的一行。如果我在pricelist_entries表中搜索链接到多个物料行的一行,则将返回所有行,但我只想返回属于当前公司的行,即执行搜索的公司。 结论:如果materialID不为空,则materials.company=current.companyID

SELECT peID, peName, materialID
FROM pricelist_entries
INNER JOIN pricelist ON pricelist_entries.peParentID=pricelist.pID
LEFT JOIN materials ON pricelist_entries.peID=materials.pricelist_entries_id
WHERE peBrand = 'Kama' AND pricelist.pCurrent = 1 
  AND (peName LIKE '%gocamp de%' OR    peArtnr LIKE '%gocamp de%') 
  AND pricelist.country=0 AND pricelist_entries.peDeleted=0
CASE materialID WHEN IS NOT NULL THEN materials.companyID=10 END
请告诉我是否需要更好地描述我的问题。
提前谢谢

听起来,将条件移动到联接中会使它更简单

SELECT peID, peName, materialID
FROM pricelist_entries
INNER JOIN pricelist 
  ON pricelist_entries.peParentID=pricelist.pID
LEFT JOIN materials 
  ON pricelist_entries.peID=materials.pricelist_entries_id
 AND materials.companyID=10                                 -- << condition
WHERE peBrand = 'Kama' AND pricelist.pCurrent = 1 
  AND (peName LIKE '%gocamp de%' OR    peArtnr LIKE '%gocamp de%') 
  AND pricelist.country=0 AND pricelist_entries.peDeleted=0

它只会在链接到正确公司的物料行中留下连接。

我知道在where子句中不能使用CASE,您需要在SELECT部分中使用它,但它将具有相同的效果。像这样的方法应该会奏效:

SELECT CASE materialid WHEN IS NOT NULL THEN companyid END as thiscompanyid

这将为您提供一个名为thiscompanyid的新列,您可以查询该列以获取所需内容

这正是我想要的。谢谢