首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从具有相同列的两个表中执行select

从具有相同列的两个表中执行select
EN

Stack Overflow用户
提问于 2016-07-05 03:40:41
回答 2查看 53关注 0票数 0

我有两个具有相同列的表,我需要在这两个表中进行select,我想知道如何才是最好的方法,我的select测试是:

代码语言:javascript
运行
复制
SELECT       
    ISNULL(LoteDet.IdLoteDet, LoteDetPg.IdLoteDet) AS Expr1, 
    ISNULL(LoteDet.IDSac, LoteDetPg.IDSac) AS Expr2, 
    ISNULL(LoteDet.Comprom, LoteDetPg.Comprom) AS Expr3, 
    ISNULL(LoteDet.NossoNum, LoteDetPg.NossoNum) AS Expr4,
    ISNULL(LoteDet.NossoNumDig, LoteDetPg.NossoNumDig) AS Expr5
FROM  
    LoteDet 
CROSS JOIN 
    LoteDetPg
WHERE 
    Expr1 = 500

这是可能的吗?

如何更好地执行这种select,如果在一个表中找不到值,该值将在另一个表中...

-编辑

也许创建一个视图是这种select类型的一个很好的替代方案?

EN

回答 2

Stack Overflow用户

发布于 2016-07-05 04:13:41

使用合并:

代码语言:javascript
运行
复制
 SELECT       
    COALESCE(LoteDet.IdLoteDet, LoteDetPg.IdLoteDet) AS Expr1, 
    COALESCE(LoteDet.IDSac, LoteDetPg.IDSac) AS Expr2, 
    COALESCE(LoteDet.Comprom, LoteDetPg.Comprom) AS Expr3, 
    COALESCE(LoteDet.NossoNum, LoteDetPg.NossoNum) AS Expr4,
    COALESCE(LoteDet.NossoNumDig, LoteDetPg.NossoNumDig) AS Expr5
FROM  
    LoteDet 
CROSS JOIN 
    LoteDetPg
WHERE 
    Expr1 = 500

看一下这个文档:https://msdn.microsoft.com/pt-br/library/ms190349.aspx

票数 0
EN

Stack Overflow用户

发布于 2016-07-05 04:21:55

我相信这会给你带来所谓的笛卡尔乘积。它是开放连接的结果,就像上面的一样。该查询将返回大量记录,因为您没有指定如何连接这两个表,它只是盲目地尝试匹配列。至少,将ON条件添加到连接中,以便可以匹配ID/键。我认为您需要的是一个带有on的内连接;这将根据ID/键返回所有匹配的行。

代码语言:javascript
运行
复制
SELECT
   CASE WHEN tbl1.Comprom IS NULL THEN tbl2.Comprom ELSE tbl1.Comprom END AS Expr1
   CASE WHEN tbl1.Nossonum IS NULL THEN tbl2.Nossonum ELSE tbl1.Nossonum END AS Expr2
FROM
    tbl1 --LoteDet
    INNER JOIN tbl2 --LoteDetPg
        ON (tbl1.ID = tbl2.ID)
WHERE
    Expr1 = 500 --I know I swapped the expression values, use whichever expression you need here

现在,只有具有匹配ID的行将返回值,并且它将使用来自tbl1的值,除非它是null,否则它将使用来自tbl2的值。

编辑:我知道如果指定了WHERE,交叉连接就会变成内连接,但是WHERE需要包含这两个表吗?我觉得Expr1 = 500仍然会产生笛卡尔乘积;有人能纠正我吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38191310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档