SELECT * from i_user_channel_set WHERE subject_type=1 SELECT * from i_user_channel_set WHERE subject_type=2 这两个语句如果想第一个没有查询到结果就查询第二个,第一个有结果就忽略第二个语句 单纯用sql可以做到嘛
SELECT * from i_user_channel_set WHERE subject_type=1 or subject_type=1
SELECT * FROM i_user_channel_set WHERE subject_type IN (
SELECT IF subject_type IS NULL THEN (SELECT subject_type from i_user_channel_set WHERE subject_type=2 ) ELSE THEN subject_type END AS subject_type FROM i_user_channel_set WHERE subject_type=1
);
-- 真是闲着没事,吃饱了给自己找不自在
select * from i_user_channel_set where subject_type = if((select count(0) from i_user_channel_set where subject_type=1)>0, 1, 2);
首先我这个方案肯定是可以实现,其次脚本逻辑清晰,效率较高,大家可以执行实验一下
想了半天,应该是不行,试了很多函数也没法实现
( SELECT * from i_user_channel_set WHERE subject_type=1 ) UNION ALL
( SELECT * from i_user_channel_set WHERE subject_type=2 AND ( NOT EXISTS ( SELECT * from i_user_channel_set WHERE subject_type=1 ) ) )
这样就可以
SELECT * from i_user_channel_set WHERE subject_type=1
UNION
SELECT * from i_user_channel_set WHERE subject_type=2 and (SELECT count(1) from i_user_channel_set WHERE subject_type=1 )=0