1

私は知的財産管理システムに取り組んでおり、データベースに商標とデザインの 2 つのテーブルがあります。

それから私は反対のようなものを持っています。これは、他の誰かが商標またはデザインを持っている場合、それが私たちのクライアントのものに似ている場合、マネージャーは新しい反対を作成できることを意味します.

たとえば、3 つのテーブルがあります。

商標:

id 
name

デザイン:

id
name

反対:

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 列として保存することを考えましたが、テーブル名をクエリできるかどうかわからないことに気付きました。まず第一に、それは間違いなく悪い設計です。

でもここで打たれて何も頭に浮かびません。それで、誰もそれを処理する方法を知っていますか?

4

2 に答える 2

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'
于 2012-04-26T10:53:20.017 に答える
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これにより、テーブルの結合と結合の 2 つのクエリが発行されますdesign。次に、結果は を使用して 1 つの結果セットに統合されUNIONます。

于 2012-04-26T10:50:06.093 に答える