繁体   English   中英

SQL - where子句中的case

[英]SQL - Case in where clause

我得到了以下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

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

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

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的新列,您可以查询它以获得所需内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM