组合 3 个表,其中 2 列的组合不是唯一的

Posted

技术标签:

【中文标题】组合 3 个表,其中 2 列的组合不是唯一的【英文标题】:combining 3 tables where combination of 2 columns is not unique 【发布时间】:2014-05-12 22:17:20 【问题描述】:

有 3 个(将来最多 6 个)具有相同列的表。

我需要统一它们,即在同一列上联合。除此之外 - 行不应是唯一的,基于 2 列组合!网上有几个示例,但所有示例都显示了如何根据 WHERE 一列排除唯一列值。就我而言,有 2 列(Col1 和 Col2 组合)。

以下是示意图:

这是我想象的最终查询(对于 3 个表)的样子:

SELECT
*
FROM
(
SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
SELECT * FROM table3
)
GROUP BY
Col1, Col2
HAVING
COUNT (*) > 1

什么是正确的方法?

附注仅供参考的单列解决方案

Multiple NOT distinct

How to select non "unique" rows

How to Select Every Row Where Column Value is NOT Distinct

编辑:

我已使用已接受答案中的代码并添加了其他搜索条件:

  ON (SOUNDEX(Merged.[name_t1]) = SOUNDEX(Multiples.[name_t1]) OR Merged.[name_t1] LIKE '%' + Multiples.[name_t1] + '%' OR Multiples.[name_t1] LIKE '%' + Merged.[name_t1] + '%')
  AND (SOUNDEX(Merged.[name_t2]) = SOUNDEX(Multiples.[name_t2]) OR Merged.[name_t2] LIKE '%' + Multiples.[name_t2] + '%' OR Multiples.[name_t2] LIKE '%' + Merged.[name_t2] + '%')

搜索 col1 和 col2:

-来自 SOUNDEX

-by col1 like (col1 from other table)

-by (col1 from other table) like col1

【问题讨论】:

什么种类的SQL? MS-SQL、PostgreSQL、mysql 等?如果您拥有可用的通用表表达式的功能,我敢说我可以沙沙作响...... @AjVJsy 那是一个 sqllite 数据库 这很好,根据sqlite.org/lang_with.html,这允许我继续使用一种技术 - 您可以使用双 CTE 方法。将所有表联合到第一个 CTE 中,第二个按 Cols1&2 分组,计数>1,然后在主 SELECT 中,您可以在两者之间连接以返回第一个 CTE 中位于第二个的所有行。如果您需要更多内容,我可以在几个小时内提供一个骨架大纲...... @AjVJsy 期待!主要思想是将 3 个或更多表与非唯一的 col1 和 col2 结合在一起。下班后,我将尝试挖掘有关您提出的解决方案的更多信息!谢谢 【参考方案1】:

以下是基于 CTE 的方法的基础知识:

With Merged AS
(  -- CTE 1 : All Data in one table
 SELECT * FROM table1
  UNION ALL
 SELECT * FROM table2
  UNION ALL
 SELECT * FROM table3
) 
, Multiples AS
(  -- CTE 2 : Group by the fields in common
 SELECT   Col1, Col2
 FROM Merged
 GROUP BY Col1, Col2
 HAVING Count(*)>1 -- only want Groups of 2 or more
)
SELECT
  Merged.*
FROM Merged INNER JOIN Multiples
  -- Only return rows from Merged if they're in Multiples
   ON Merged.[Col1]=Multiples.[Col1]
  AND Merged.[Col2]=Multiples.[Col2]

类似的东西适用于我自己的示例 MS-SQL 数据,看起来 SQLite 语法是相同的。 HTH!

【讨论】:

谢谢!我今天晚上准备测试数据做一些测试 就像一个魅力!除了 - 我必须为选择添加额外的条件..查看帖子更新

以上是关于组合 3 个表,其中 2 列的组合不是唯一的的主要内容,如果未能解决你的问题,请参考以下文章

表中列的唯一值组合

创建 2、3 或 4 列的每个唯一组合的总和

PostGreSql 使用拥有 Max 子句获取两列的唯一组合

多列组合在猪中唯一

检索任意行以获取数据框中列的唯一组合

过滤 Pyspark 中列的动态唯一组合