Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Join 查询,用于在使用条件交叉联接时将union all查询转换为单个查询_Join_Sql Server 2008 R2 - Fatal编程技术网

Join 查询,用于在使用条件交叉联接时将union all查询转换为单个查询

Join 查询,用于在使用条件交叉联接时将union all查询转换为单个查询,join,sql-server-2008-r2,Join,Sql Server 2008 R2,例如,我创建了以下两个表: create table #fruit(id int, fname varchar(20)); create table #fruitinfo (dayid int, id int); 我插入了以下提到的值: INSERT INTO #fruit values (1, 'apple'); INSERT INTO #fruit values (2, 'banana'); INSERT INTO #fruit values (3, 'grapes'); INSERT I

例如,我创建了以下两个表:

create table #fruit(id int, fname varchar(20));
create table #fruitinfo (dayid int, id int);
我插入了以下提到的值:

INSERT INTO #fruit values (1, 'apple');
INSERT INTO #fruit values (2, 'banana');
INSERT INTO #fruit values (3, 'grapes');
INSERT INTO #fruit values (4, 'all');

insert into #fruitinfo values (1, 1);
insert into #fruitinfo values (2, 1);
insert into #fruitinfo values (2, 2);
insert into #fruitinfo values (3, 3);
insert into #fruitinfo values (4, 4);
对于id在(1,2,3)中的所有日子,我必须显示特定的水果名称。对于id为4的所有记录,即“全部”,我必须显示3条记录,显示每个水果。我在下面写了同样的联合查询。只是想检查一下,我们是否有任何方法可以在不使用union/union all的情况下在单个查询中实现这一点

select fi.dayid 
       , f.fname
from #fruitinfo fi
inner join #fruit f
  on fi.id = f.id
where f.id in (1,2,3)  
UNION ALL
select fi.dayid 
       , f.fname
from #fruitinfo fi
cross join #fruit f
where f.id in (1,2,3)  
and fi.id = 4;
结果如下:

dayid   fname
1       apple
2       apple
2       banana
3       grapes
4       apple
4       banana
4       grapes

我认为你不能在这里避免
UNION-ALL
操作符。
UNION ALL
有什么问题吗?没什么,只是想检查其他选项,因为我的一位同事告诉我,有一种方法可以在单个查询中完成,而不是在UNION查询中完成