2013-05-12 4 views
0

У меня есть следующий вопрос sql, который я не буду работать для меня. Я знаю, что последняя строка CASE неверна, но я хотел бы использовать оператор CASE, подобный этому в моем разделе where.SQL - case in where clause

Краткое описание моей ситуации: У меня есть несколько компаний, у которых есть собственный материал, связанный с ними с «companyID». Каждый материал может быть связан со строкой в ​​pricelist_entries. Если я ищу одну строку в таблице pricelist_entries, которая связана со многими материальными строками, все строки будут возвращены, но я просто хочу вернуть ту, которая принадлежит текущей компании (компании, которая выполняет поиск). Заключение: Если материал НЕ НЕИСПРАВНО, то материалы.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

0

Вы не можете использовать CASE в условии where, о котором я знаю, вам нужно использовать его в секции SELECT, но он будет иметь тот же эффект. Нечто подобное должно работать:

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

Это даст вам новый столбец с именем thiscompanyid и вы можете запросить от этого, чтобы получить то, что вам нужно.