Mysql 如果在另一个表中找到记录,请从表中选择

Mysql 如果在另一个表中找到记录,请从表中选择,mysql,sql,oracle,oracle11g,Mysql,Sql,Oracle,Oracle11g,我需要从表1中选择一些行,比如说,如果在表2中找到一个值。因此,我想检查是否在表2中找到了值(我将从命令行输入值),然后从表1中选择行,如果没有,我想从另一个表中选择行。 我试过这个例子,但从我得到的结果来看,只有当您想检查一个表中的值时,它才起作用。有什么想法吗?如果表3中存在:id,则此查询将从表1中选择,否则: select * from Table1 where exists ( select * from Table3

我需要从表1中选择一些行,比如说,如果在表2中找到一个值。因此,我想检查是否在表2中找到了值(我将从命令行输入值),然后从表1中选择行,如果没有,我想从另一个表中选择行。
我试过这个例子,但从我得到的结果来看,只有当您想检查一个表中的值时,它才起作用。有什么想法吗?

如果
表3
中存在
:id
,则此查询将从
表1
中选择,否则:

select  *
from    Table1
where   exists
        (
        select  *
        from    Table3
        where   id = :id
        )
union all
select  *
from    Table2
where   not exists
        (
        select  *
        from    Table3
        where   id = :id
        )

您可以这样做:

-- If value is found in table2, select from table1
select * -- <- use padding if necessary 
  from table1
 where exists (select 1
                 from table2
                where myField = value)

union all

-- If value is not found in table2, select from another_Table
select * -- <- use padding if necessary
  from another_Table
 where not exists (select 1
                     from table2
                    where myField = value)
——如果在表2中找到值,请从表1中选择

选择*——感谢您的回复,但表1和表2的列号或列类型不相同。我想单独选择其中一个。谢谢,但是如果表的列数和/或列类型不同,该怎么办?@Albano Vito:使用填充(添加nulls)、强制转换,例如:选择id、null、注释。。。union all select id、名称、空值!Where Exists是一个非常慢的查询,因为它会对每一行运行整个表扫描!!我测试它时花了19秒,相比之下,Left join要快得多,只花了0.85秒。@DeepBlue:这取决于现有索引、RDBMS、收集的统计数据等。