2010-06-15 45 views
0

我甚至不確定是否有可能,但我需要它用於Access數據庫。所以,我有以下數據庫結構:複雜的條件SQL查詢

alt text http://images.virtualdesign.pl/images/25480Drawing1.jpg

現在我需要執行這需要從我的產品CATEGORY_ID查詢並做魔術:
- 假設產品屬於控制檯(category_id在表控制檯)
- 從console_types採取type_id,其中category_id == category_id
- 但如果產品屬於console_gamecategory_id是在表console_game
- 從console_game採取game_cat_id,其中category_id == category_id

我不確定mysql是否有這種能力。如果不是,我真的有問題。也許有辦法將它分成2,3個獨立的查詢?

編輯:

我發現像IF EXISTS (SELECT type_id FROM console WHERE category_id='category_id')。也許這會有幫助嗎?

+0

所以,爲了清楚起見 - 第二個和第四個項目符號點是您想要作爲一個結果集檢索的結果? 我也想看看把類別保存到可能有ID,父ID,類別名稱的表中。如果可能的話。 – 2010-06-15 23:58:13

+0

不,不,分開。如果產品是控制檯做...,否則...。不幸的是,我的基地已經建成並充滿了產品:/ – DevAno1 2010-06-16 00:07:23

回答

0

您需要使用case語句做一個選擇,如:

Select Case (expression) 
Case option1 
    statement1 
Case option2 
    statement2 

Example Access case statement

Case語句在MySQL中,SQL服務器等(語法實現之間變化)工作。

+0

so FROM product SELECT category_ID CASE WHEN ... - 但如何檢查category_id是否在控制檯,console_game或附件中?使用一些IF的? – DevAno1 2010-06-16 00:08:56

+0

like:IF NOT EXISTS(SELECT type_id FROM console WHERE category_id ='category_id')? – DevAno1 2010-06-16 00:12:48

+0

引用的例子是針對VBA的。 CASE SELECT不是有效的Jet/ACE SQL。替代方案是Choose()和Switch()以及嵌套的IIf(),但通常情況下,任何過度複雜的使用都意味着您將數據存儲在SQL語句中,而應該使用可以加入的表。 – 2010-06-16 21:01:21

0

您可以通過執行三個子查詢來解決此問題,並使用UNION ALL來合併它們。