SQL - where子句中的case

时间:2013-05-12 07:19:12

标签: mysql sql

我得到了以下sql问题,我不会为我工作。我知道最后一个CASE行是错误的,但我想在我的where子句中使用CASE语句。

我的情况简述: 我有几家公司通过“companyID”将自己的材料与他们联系起来。每个材料都可能链接到pricelist_entries中的一行。如果我在pricelist_entries表中搜索链接到许多材料行的一行,则将返回所有行,但我只想返回属于当前公司的那一行(执行搜索的公司)。 结论:如果materialID NOT NULL,那么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

请告诉我是否需要以更好的方式描述我的问题。 提前谢谢!

2 个答案:

答案 0 :(得分:2)

听起来只是将条件移入连接会使其更简单;

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

它只会保留连接到正确公司的材料行的连接。

答案 1 :(得分:0)

你不能在我知道的where子句中使用CASE,你需要在SELECT部分​​使用它,但它会产生相同的效果。这样的事情应该有效:

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

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