组合 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 列的组合不是唯一的的主要内容,如果未能解决你的问题,请参考以下文章