根据条件将两个 MySql 查询合并为一个查询

Combining two MySql queries into a single query based upon a condition

我正在使用 5.7.20-enterprise-commercial 并有一个 MySql 查询,如下所示:

SELECT name FROM jobTable where jobId IN (SELECT dataId from logTable
WHERE eValue ='1098hbfce');

如果上面的查询 returns 一个空值那么我想 运行 下面的查询:

SELECT name FROM jobTable where procId IN (
SELECT dataId from logTable WHERE eValue ='1098hbfce');

第一个查询和第二个查询之间的唯一区别是在第一个查询中使用 jobId。 并且,在第二个查询中使用 procId

此外,如果第一个查询returns non null

,我不想运行第二个查询

我正在使用以下方法,但它似乎无法正常工作

IF (SELECT name FROM jobTable where jobId IN (SELECT dataId from logTable
   WHERE eValue ='1098hbfce')) IS NOT NULL 
   EXECUTE (SELECT name FROM jobTable where procId IN (
   SELECT dataId from logTable WHERE eValue ='1098hbfce'));

要求是在 SQL 查询本身中执行,而不创建存储过程。 jobTablelogTable

没有关系

使用 CASE 表达式:

SELECT name 
FROM jobTable 
where (CASE 
       WHEN jobId IN (SELECT dataId from logTable WHERE eValue ='1098hbfce')
       THEN 1
       WHEN procId IN (SELECT dataId from logTable WHERE eValue ='1098hbfce') 
       THEN 1 
      END) = 1 ;

合并开启

drop table if exists t,log_table;
create table t(name varchar(10),jobid int,procid int);
create table log_table(dataid int,evalue varchar(10));

insert into t values ('aaa',null,null),('bbb',null,1),('ccc',1,null);
insert into log_table values(1,'1098hbfce');

select *,
        coalesce(jobid,procid),
        coalesce(procid,jobid)
        
from t
join log_table lt on 
        dataid = coalesce(jobid,procid) or dataid = coalesce(procid,jobid)  ;

+------+-------+--------+--------+-----------+------------------------+------------------------+
| name | jobid | procid | dataid | evalue    | coalesce(jobid,procid) | coalesce(procid,jobid) |
+------+-------+--------+--------+-----------+------------------------+------------------------+
| bbb  |  NULL |      1 |      1 | 1098hbfce |                      1 |                      1 |
| ccc  |     1 |   NULL |      1 | 1098hbfce |                      1 |                      1 |
+------+-------+--------+--------+-----------+------------------------+------------------------+
2 rows in set (0.001 sec)