[英]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.