JOIN 中的 MySQL 条件表名 [英] MySQL conditional table name in JOIN

查看:50
本文介绍了JOIN 中的 MySQL 条件表名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究知识产权管理系统,我的数据库中有 2 个表 - 商标和设计.

I'm working on intellecual property management system, where I have 2 tables in database - trademark and design.

然后我有反对意见.这意味着,如果其他人拥有与我们客户相似的商标或设计,经理可以提出新的异议.

Then I have such thing as opposition. This means, if someone else has trademark or design, that looks like our's clients one, manager can create new opposition.

例如,我有 3 个表:

For example, I have 3 tables:

商标:

id 
name

设计:

id
name

反对:

id
name
object_id
object_table

我不知道什么表反对是相关的,但我应该有可能进行这样的查询:

I don't know, to what table opposition is related, but I should have a possibility to make such kind of query:

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

首先,我想将表名存储为对立表的 object_table 列,但后来我意识到我不知道是否可以查询表名,首先,这绝对是一个糟糕的设计.

First, I thought about storing table name as object_table column of opposition table, but then I realised I don't know if it will be possible to query table name and, first of all, it's defenitely a bad design.

但是我在这里被击中了,什么也没想.那么有没有人有任何想法如何处理它?<​​/p>

But I got strucked here and nothing comes to my mind. So does anyone have any ideas how to handle it?

推荐答案

也许是这样的:

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'

这篇关于JOIN 中的 MySQL 条件表名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆