首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL合并查询的联接问题--覆盖或合并同一表中的两行

MySQL合并查询的联接问题--覆盖或合并同一表中的两行
EN

Stack Overflow用户
提问于 2011-02-04 20:05:01
回答 1查看 730关注 0票数 1

这很难解释,所以我会尽力的。

我有一个表,它由默认行(由NULL specificSiteID注意到)和覆盖行(由非NULLspecificSiteIDs注意到)组成。

两种类型的行都使用genericID来确定正在加载的数据--有时,某些数据可能没有默认值。

编辑1:我所指的非空specificSiteID只有在其siteID与我所查询的siteID匹配时才覆盖默认值。我不将所有重写应用于一个默认设置--我只对默认值应用specificSiteID的覆盖。结束编辑1

我有四个查询要求:

当既没有默认的数据,也没有特定于行的override.

  • Return时,
  1. 不返回数据。当没有默认数据时,
  2. 返回覆盖覆盖默认数据的重写数据,其中覆盖的数据不是null
  3. ,最后,在存在默认数据且没有覆盖数据时,只返回默认数据。

现在,我的SQL查询看起来--

代码语言:javascript
复制
SELECT COALESCE( override.Col1 , default.Col1) as Col1,
 COALESCE(override.Col2, default.Col2) as Col2
 FROM
  (SELECT * from tableA where 
     genericID = 84 AND 
     specificSiteID IS NULL ) as default
 LEFT JOIN
  (SELECT * from tableA where 
     genericID = 84 AND 
     specificSiteID = 34 ) as override
 ON default.genericID = override.genericID;

这个脚本的问题是,由于LEFT JOIN,第二种情况失败了。如果没有默认行LEFT JOIN 84,则不包含覆盖行。使用上述示例,如果没有genericID =84( specificSiteIDNULL ),则不返回数据,即使存在覆盖数据。

我在找什么样的JOIN?我甚至可以用JOIN来报道这件事吗

EN

回答 1

Stack Overflow用户

发布于 2011-02-04 23:52:47

因为Mysql不支持完全连接,但是您可以使用“左连接”+“右连接”来模拟它。

我认为genericID 34和specificSiteID 84是示例,您需要连接所有specificSiteId为null (默认)和null (覆盖)的通用is,不是吗?

代码语言:javascript
复制
SELECT COALESCE( override.Col1 , default.Col1) as Col1,
       COALESCE(override.Col2, default.Col2) as Col2
  FROM (SELECT * from tableA where specificSiteID IS NULL ) as default
        LEFT JOIN  (SELECT * from tableA where specificSiteID is not null ) as override
               ON default.genericID = override.genericID
UNION 
SELECT COALESCE( override.Col1 , default.Col1) as Col1,
       COALESCE(override.Col2, default.Col2) as Col2
  FROM (SELECT * from tableA where specificSiteID IS NULL ) as default
        RIGHT JOIN  (SELECT * from tableA where specificSiteID is not null ) as override
               ON default.genericID = override.genericID

但是,查看这个查询似乎您的DB设计并不适合您的情况。

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

https://stackoverflow.com/questions/4902415

复制
相关文章

相似问题

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