2012-11-09 32 views
-1

我相信有一種方法可以做到這一點,但我無法看到如何。選擇與回退到基本項目查詢

我有一個項目表被分類:

table items 
(
    item_name 
    id_category 
) 
- item list - 
"Item one", 1 
"Item two", 2 
"Item three", 3 

table service 
(
    service_name 
    exclusive 
    id_category 
) 
- service list - 
"Basic service", 0, null 
"Advanced service", 1, null 
"Super service", 1, 2 

我需要做一個選擇上的服務表中查找這是針對特定的項目服務。 它應該總是返回一個不是唯一的,而不是類別特定的服務。 當id_category爲空時,它也應該只返回與其類別相關的專有服務。

所以對於「項目一」的查詢應該返回

Basic Service 
Advanced Service 

和「項目二」應該返回

Basic Service 
Super Service 

誰能幫助我?

+0

此網站旨在幫助您完成工作,而不是爲您做事。 –

+0

@EH_watch - 您的評論完全無益!這個問題提出了我想要做的一個非常簡化的版本。到目前爲止我嘗試過的SELECT語句只能返回所有服務列表或不正確的列表。因此,我的問題... – Simon

+0

你嘗試過DECODE或CASE語句嗎? – Randy

回答

0

你需要一個UNION

(SELECT `service_name` FROM `service` WHERE `exclusive`='0') 
UNION 
(SELECT IFNULL(`service`.`service_name`,(SELECT `service_name` FROM `service` WHERE `exclusive`='0' AND `id_category` IS NULL)) FROM `items` LEFT JOIN `service` ON `items`.`id_category`=`service`.`id_category` WHERE `items`.`name`='Item one') 

你的WHERE第二查詢子句可能會有所不同。我假設您正在按物品名稱搜索

+0

你確定OP不需要'UNION ALL'? – Kermit

+0

@njk我從來沒有使用過或聽說過UNION ALL。我正在閱讀它現在... –

+0

謝謝你的建議,剛剛嘗試過這一點,我得到的是類別具體和非特定的服務。我需要的是,如果沒有找到類別,它會「退回」到非特定狀態。 – Simon