2013-05-12 95 views
0

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

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

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

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

这正是我所期待的。谢谢! :) – hgerdin 2013-05-12 07:32:10

0

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

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

这会给你一个新的命名列thiscompanyid,你可以查询关闭的,要得到你所需要的。