2013-05-12 208 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,你可以查詢關閉的,要得到你所需要的。