2012-04-26 71 views
1

我正在開發知識產權管理系統,我在數據庫中有兩個表格 - 商標和設計。JOIN中的MySQL條件表名稱

然後我有反對派這樣的事情。這意味着,如果其他人擁有商標或設計,看起來就像我們的客戶一樣,經理可能會產生新的反對意見。

例如,我有3個表:

商標:

id 
name 

設計:

id 
name 

oppostion:

id 
name 
object_id 
object_table 

我不知道,什麼桌子反對是相關的泰德,但我應該有一個可能性作出這樣的查詢:

SELECT id, name, opposition_object.name FROM opposition 
LEFT JOIN (trademark|design) as opposition_object on opposition.object_id = (trademark|design).id 

首先,我想到了存儲表名反對派表object_table列,但後來我意識到,我不知道這是否是可能會查詢表名稱,首先,它是一個不錯的設計。

但我在這裏受到傷害,沒有出現在我的腦海裏。那麼有沒有人有任何想法如何處理它?

回答

3

也許是這樣的:

SELECT 
    id, 
    name, 
    COALESCE(trademark.name,design.name) AS object_name 
FROM 
    opposition 
    LEFT JOIN trademark 
     on opposition.object_id = trademark.id 
     AND trademark.object_table ='trademark' 
    LEFT JOIN design 
     on opposition.object_id = design.id 
     AND design.object_table ='design' 
+0

感謝,這正是我一直在尋找! – 2012-04-26 11:08:13

+0

@KuH也可以比較我的答案中的查詢性能。我不完全確定,但我覺得我的查詢應該更快,返回相同的結果。 – 2012-04-26 11:16:24

+1

@KuH:沒問題。記住投票你認爲是好的答案。這給了我們一種溫暖的模糊感覺:P。 – Arion 2012-04-26 11:17:20

0
SELECT opposition.id, opposition.name, trademark.name AS object_name 
FROM opposition 
LEFT JOIN trademark 
    ON opposition.object_id = trademark.id 
WHERE opposition.object_table = 'trademark' 

UNION 

SELECT opposition.id, opposition.name, design.name AS object_name 
FROM opposition 
LEFT JOIN design 
    ON opposition.object_id = design.id 
WHERE opposition.object_table = 'design' 

這會發出兩個查詢:一個加盟trademark表和一個連接design。然後使用UNION將結果統一到一個結果集中。