【问题标题】:SQL query combining 6 tables (with the same fields)SQL查询组合6个表(具有相同的字段)
【发布时间】:2017-11-08 22:26:09
【问题描述】:

嗯,我很难找到我需要的解决方案,我希望有人可以帮助我。 有 6 家不同的商店,有不同的产品,有些商店有些重合,有些则没有。

我有 6 个具有相同字段的表:Acronym、Name、Category、Quantity 和 Value。 我需要将同一个表中的所有产品与它们之间的“首字母缩略词”的引用合并。

我的数据库不支持 FULL OUTER JOIN 功能。

我需要这样的回报:

(* Qtt = 数量)

SQL RESULTS

【问题讨论】:

  • 你试过UNION ALL吗?
  • 您如何使用 sql server 并声明您的数据库不支持完全外连接?这没有任何意义。
  • 我认为您需要提供一些有关您的系统的详细信息。这是一个很好的起点。 spaghettidba.com/2015/04/24/…
  • 我使用的是 mysql 而不是 sql server。我的系统是: - 服务器版本:10.0.22-MariaDB-1 - 数据库客户端版本:libmysql - mysqlnd 5.0.11-dev - 20120503 我不是sql的高级用户,所以我不知道具体如何尝试这与 UNION AL
  • 联合相对简单...如果表模式相同,则此方法有效。 select * from t1 union all select * from t2.请注意,您使用 SQL-Server(引用 MSSQL)标记了您的问题。请编辑您的问题并将其标记为 MySQL。老实说,您似乎正在尝试通过您的示例数据提出一个枢纽问题,而不是一个联合问题。呃...或者这是 6 个左连接?

标签: mysql sql database database-design mariadb


【解决方案1】:

假设 t1、t2、t3、t4、t5、t6 是您的桌子。这应该可以帮助您开始:

select
     acro.acronym,t1.name t1name, t2.name t2name .....
from (
      select acronym from t1 union
      select acronym from t2 union
      select acronym from t3 union
      select acronym from t4 union
      select acronym from t5 union
      select acronym from t6
     ) acro
left join t1 on acro.acronym = t1.acronym 
left join t2 on acro.acronym = t2.acronym 
left join t3 on acro.acronym = t3.acronym 
left join t4 on acro.acronym = t4.acronym 
left join t5 on acro.acronym = t5.acronym 
left join t6 on acro.acronym = t6.acronym 

子查询 acro 只是从 6 个表中构建所有首字母缩写词的唯一列表,然后左连接源表会将数据与每个(和所有)首字母缩写词对齐。

【讨论】:

    【解决方案2】:

    这假设它们没有相同的列:

    CREATE TABLE AllData
    ( SELECT acronym, this, that, ... FROM t1 )
    UNION ALL
    ( SELECT acronym, this, NULL as that, ... FROM t2 ) -- no "that" in t2
    UNION ALL
    ( SELECT acronym, NULL as this, that, ... FROM t3 ) -- no "this" in t3
    ...
    

    如果acronymPRIMARY KEY,那么就这样开始:

    CREATE TABLE AllData ( PRIMARY KEY(acronym) )
    ( SELECT ...
    

    如果您需要新的AUTO_INCREMENT,请执行以下操作:

    CREATE TABLE AllData ( id INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(id) )
    ( SELECT ...
    

    如果他们确实有相同的列,那么请忽略我关于 NULL as ... 的注释。

    【讨论】:

      猜你喜欢
      • 2013-12-23
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      相关资源
      最近更新 更多