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