Mysql 通过或连接两个表

Mysql 通过或连接两个表,mysql,sql,Mysql,Sql,我有这些桌子 一个文本包含多个项目,作者,行 ttext_obj表 text_obj_writers表 文本对象行表 所以,我想选取至少有一个作者或一行的文本行 现在我编写了这样的代码 至少有一次写入的文本对象id 至少有一行的文本对象id 但我想把这些都拿走 如何通过或连接两个表?您可以使用: 您可以使用exists: 存在以下用途: 这比使用聚合要好得多,因为将表连接在一起后,不需要删除重复项。使用存在: 这比使用聚合要好得多,因为在将表连接在一起后,您不需要删除重复项。您可以使用UNION

我有这些桌子 一个文本包含多个项目,作者,行

ttext_obj表

text_obj_writers表

文本对象行表

所以,我想选取至少有一个作者或一行的文本行

现在我编写了这样的代码

至少有一次写入的文本对象id

至少有一行的文本对象id

但我想把这些都拿走

如何通过或连接两个表?

您可以使用:

您可以使用exists:

存在以下用途:

这比使用聚合要好得多,因为将表连接在一起后,不需要删除重复项。

使用存在:

这比使用聚合要好得多,因为在将表连接在一起后,您不需要删除重复项。

您可以使用UNION来执行此操作,UNION也将删除重复项:

select obj_id id from test_obj_writers
union
select obj_id id from test_obj_line
我假设两个表的所有对象ID都存在于表文本中。

您可以使用UNION执行此操作,UNION还将删除重复项:

select obj_id id from test_obj_writers
union
select obj_id id from test_obj_line
我假设两个表的所有obj_id都存在于表text_obj中

text line
1    2
4    3
1    4
SELECT text.id  FROM `text_obj` text 
inner join text_obj_writers writer 
on writer.obj_id = text.id  group by text.id

//it returns
1
2
SELECT text.id  FROM `text_obj` text 
inner join text_obj_lines line 
on line.obj_id = text.id  group by text.id

//it returns
1
4
1
2
4
select o.*
from ttext_obj o
where 
    exists (select 1 from text_obj_writers writer w where w.obj_id = o.id)
    or exists (select 1 from text_obj_lines l where l.obj_id = o.id)
select o.*
from text_obj o
where exists (select 1
              from text_obj_writers tow 
              where tow.obj_id = o.id
             ) or
      exists (select 1
              from text_obj_lines tol 
              where tol.obj_id = o.id
             ) ;
select obj_id id from test_obj_writers
union
select obj_id id from test_obj_line