0

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

我的情况的简短描述:我有几家公司在那里获得了自己的材料,这些材料与“companyID”相关联。每个材料都可能链接到 pricelist_entries 中的一行。如果我在 pricelist_entries 表中搜索链接到许多物料行的一行,所有行都将返回,但我只想返回属于当前公司(执行搜索的公司)的行。结论:如果 materialID NOT NULL THEN 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

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

4

2 回答 2

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

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

于 2013-05-12T07:29:35.880 回答
0

您不能在我知道的 where 子句中使用 CASE,您需要在 SELECT 部分使用它,但它会产生相同的效果。像这样的东西应该工作:

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

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

于 2013-05-12T07:31:19.433 回答