【发布时间】: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
什么是正确的方法?
附注仅供参考的单列解决方案
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 结合在一起。下班后,我将尝试挖掘有关您提出的解决方案的更多信息!谢谢