首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JOIN中的MySQL条件表名

JOIN中的MySQL条件表名
EN

Stack Overflow用户
提问于 2012-04-26 18:43:06
回答 2查看 983关注 0票数 1

我在知识产权管理系统上工作,在那里我有2个数据库表-商标和设计。

然后我就有了反对这样的东西。这意味着,如果其他人有商标或设计,看起来像我们的客户,经理可以创造新的反对意见。

例如,我有3个表:

商标:

代码语言:javascript
运行
复制
id 
name

设计:

代码语言:javascript
运行
复制
id
name

反面:

代码语言:javascript
运行
复制
id
name
object_id
object_table

我不知道,表的对立关系是什么,但我应该有可能做出这样的查询:

代码语言:javascript
运行
复制
SELECT id, name, opposition_object.name FROM opposition
LEFT JOIN (trademark|design) as opposition_object on opposition.object_id =   (trademark|design).id

首先,我考虑将表名存储为对立表的object_table列,但随后我意识到,我不知道是否可以查询表名,首先,这显然是一个糟糕的设计。

但我在这里喝醉了,什么也想不起来。那么,有没有人知道如何处理它呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-26 18:53:20

可能是这样的:

代码语言:javascript
运行
复制
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'
票数 3
EN

Stack Overflow用户

发布于 2012-04-26 18:50:06

代码语言:javascript
运行
复制
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将结果统一到一个结果集中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10331807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档