Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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
Sql server 避免SQL Server中的所有联合_Sql Server_Union All - Fatal编程技术网

Sql server 避免SQL Server中的所有联合

Sql server 避免SQL Server中的所有联合,sql-server,union-all,Sql Server,Union All,我有以下(简化的)问题。 我有3个表:MainTable、TableId1和TableId2。它们看起来像这样 主表 +-------+------+-----+ | Type | Id1 | Id2 | +-------+------+-----+ | a | 0 | 3 | | b | 1 | 0 | +-------+------+-----+ 表1 +-----+------+ | Id1 | code | +-----+------+ |

我有以下(简化的)问题。 我有3个表:MainTable、TableId1和TableId2。它们看起来像这样

主表

+-------+------+-----+
| Type  | Id1  | Id2 |
+-------+------+-----+
| a     | 0    |   3 |
| b     | 1    |   0 |
+-------+------+-----+
表1

+-----+------+
| Id1 | code |
+-----+------+
|   1 | abc  |
+-----+------+
表ID2

+-----+------+
| Id2 | code |
+-----+------+
|   3 | xyz  |
+-----+------+
我希望获得以下结果集:

+-------+------+
| Type  | code |
+-------+------+
| a     | xyz  |
| b     | abc  |
+-------+------+
我现在使用的是UNIONALL,但它并不优雅,当我的查询变得更复杂,我不得不编辑它时,它会成为一种痛苦

我希望这里有一个避免联合的方法,有人能告诉我吗


谢谢

使用
左外部联接
并对
Id1和Id2!使用where子句0。
将在一分钟后发布查询。

使用
左外部联接
并使用where子句作为
Id1和Id2!=0。
将在一分钟后发布查询

select type,isnull(tid1.code,tid2.code) as Code
from MainTable mt
left join TableId1 tid1 on mt.Id1=tid1.Id1
left join TableId2 tid2 on mt.Id2=tid2.Id2


定义一个从所有这三个表中获取数据的视图(使用UNION all或not)。这样,当查询“变得复杂”时,您必须修改一段代码。

定义一个从所有这3个表中获取数据的视图(使用UNION all或not)。这样,当查询“变得复杂”时,您必须修改一段代码。

您可以尝试:

SELECT 
    mt.Type
    ,t1.Code
    ,t2.Code
FROM 
    MainTable  mt
        LEFT OUTER JOIN TableId1 t1
        ON mt.Id1 = t1.Id1
            LEFT OUTER JOIN TableId2 t2
            ON mt.Id2 = t1.Id2
然而,这会给你:

+-------+------+------+
| Type  | code | code |
+-------+------+------+
| a     | null | xyz  |
| b     | abc  | null |
+-------+------+------+
这对您的场景来说可能是理想的,也可能不是理想的。

您可以尝试:

SELECT 
    mt.Type
    ,t1.Code
    ,t2.Code
FROM 
    MainTable  mt
        LEFT OUTER JOIN TableId1 t1
        ON mt.Id1 = t1.Id1
            LEFT OUTER JOIN TableId2 t2
            ON mt.Id2 = t1.Id2
然而,这会给你:

+-------+------+------+
| Type  | code | code |
+-------+------+------+
| a     | null | xyz  |
| b     | abc  | null |
+-------+------+------+

对于您的场景来说,这可能是理想的,也可能不是理想的。

继续在哪里?对不起,伙计们,我不小心按下了提交按钮…继续在哪里?对不起,伙计们,我无意中点击了提交按钮,@Luv使用IsNull的答案会给你一个更接近你要求的结果。@Luv使用IsNull的答案会给你一个更接近你要求的结果。谢谢,这是我需要的。谢谢,这是我需要的。这对我来说不是最好的,但我会记住,总有一天我会需要它,我认为这对我的情况来说不是最好的,但我会记住它,总有一天我会需要它