根据条件将两个MySql查询组合成一个查询
我使用的是根据条件将两个MySql查询组合成一个查询,mysql,join,select,inner-join,Mysql,Join,Select,Inner Join,我使用的是5.7.20-enterprise-commercial,有一个MySql查询,如下所示: SELECT name FROM jobTable where jobId IN (SELECT dataId from logTable WHERE eValue ='1098hbfce'); 如果上述查询返回空值,则我希望运行以下查询: SELECT name FROM jobTable where procId IN ( SELECT dataId from logTable WHERE
5.7.20-enterprise-commercial
,有一个MySql查询,如下所示:
SELECT name FROM jobTable where jobId IN (SELECT dataId from logTable
WHERE eValue ='1098hbfce');
如果上述查询返回空值,则我希望运行以下查询:
SELECT name FROM jobTable where procId IN (
SELECT dataId from logTable WHERE eValue ='1098hbfce');
第一个查询和第二个查询之间的唯一区别是在第一个查询中使用了jobId
。
并且,在第二个查询中使用了procId
另外,如果第一个查询返回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查询本身中执行,而不创建存储过程。
使用
CASE
表达式,jobTable
和logTable
之间没有关系:
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 ;
使用
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)
结合
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)
看起来很熟悉你昨天问这个了吗?看起来很熟悉你昨天问这个了吗?