SQLite选择和分组跨列匹配

SQLite选择和分组跨列匹配,sql,sqlite,Sql,Sqlite,我有一个名为match的SQLite表,它有两列:column1和column2,其中包含整数值: column1 column2 ------------------ 5 6 6 8 8 9 90 91 1 20 10 20 我希望匹配在任一列中找到的重复数字并将其联接,包括匹配的第二个值,以便我的搜索结果返回为: 5, 6, 8, 9 1, 20, 10 (请注意,90和91没

我有一个名为match的SQLite表,它有两列:column1和column2,其中包含整数值:

column1   column2
------------------

5          6
6          8
8          9
90         91
1          20
10         20
我希望匹配在任一列中找到的重复数字并将其联接,包括匹配的第二个值,以便我的搜索结果返回为:

5, 6, 8, 9 
1, 20, 10
(请注意,90和91没有匹配项,因此不包括在内)

我的“猜测”是:

SELECT column1, column2 
FROM match 
WHERE column2 
IN (SELECT column1 
    FROM match 
    GROUP BY column1 HAVING (COUNT(column1) > 0)) 
    UNION 
    SELECT column1, column2 
    FROM match 
    WHERE column1 
    IN (SELECT column2 
        FROM match 
        GROUP BY column1 HAVING (COUNT(column2) > 0)) 
        UNION 
        SELECT column1, column2 
        FROM match 
        WHERE column1 
        IN (SELECT column1
            FROM match 
            GROUP BY column1 HAVING (COUNT(column1) > 1)) 
            UNION 
            SELECT column1, column2 
            FROM match 
            WHERE column2 
            IN (SELECT column2 
                FROM match 
                GROUP BY column2 HAVING (COUNT(column2) > 1)) 
结果几乎就是我所需要的:

5 6
6 8
8 9
1 20
10 20
但我真正需要的是以某种方式将结果分组。例如:

(5,6,8,9)(1,10,20)


这可能吗?我的SQL尝试是否过于复杂?

我想这就是您想要的:


我想这就是你想要的:


您最多可以找到多少个匹配项?我真的不认为这种逻辑应该在数据库层进行。如果你的规则是有匹配项,为什么1、5、9和10会进入你想要的结果?哦,我现在明白了,如果其中任何一个数字匹配,你想要整个记录。是的,还分组。我应该提到的是,我有SQL的基本知识,理想情况下,无论SQLite数据库返回什么,我都可以逐步完成,即返回的第一条记录:“5,6,8,9”,返回的第二条记录:“1,10,20”。您能找到的最大匹配数是多少?我真的不认为这种逻辑应该在数据库层进行。如果你的规则是有匹配项,为什么1、5、9和10会进入你想要的结果?哦,我现在明白了,如果其中任何一个数字匹配,你想要整个记录。是的,还分组。我应该提到的是,我有SQL的基本知识,理想情况下,无论SQLite数据库返回什么,我都可以逐步完成,即第一条记录返回:“5,6,8,9”,第二条记录返回:“1,10,20”。谢谢。这很有用,但我想让我的问题更清楚一点:(5,6,8,9)是一个组(或一个集合),因为它们有一些共同点,在第1列或第2列中都有相同的数字。(1、10、20)也是一个组(或集合),因为它们在第1列或第2列中也有公共数字。我的目标是根据这条规则对搜索结果进行分组。我不确定你是否可以用显示的数据逻辑地进行分组。我不知道您的表设计实际上是什么,但我现在想知道是否可以通过首先检查您如何存储数据并确定其中的一些更改是否可以使其更可行来解决此问题。或者像KDiTraglia说的,也许数据库层不是解决这个问题的合适地方。谢谢。这很有用,但我想让我的问题更清楚一点:(5,6,8,9)是一个组(或一个集合),因为它们有一些共同点,在第1列或第2列中都有相同的数字。(1、10、20)也是一个组(或集合),因为它们在第1列或第2列中也有公共数字。我的目标是根据这条规则对搜索结果进行分组。我不确定你是否可以用显示的数据逻辑地进行分组。我不知道您的表设计实际上是什么,但我现在想知道是否可以通过首先检查您如何存储数据并确定其中的一些更改是否可以使其更可行来解决此问题。或者像KDiTraglia所说的,也许数据库层不是解决这个问题的合适地方。
SELECT column1 as newColumn
FROM match WHERE column1 in (

SELECT myColumn
FROM(

SELECT count(*) as cnt, myColumn
FROM (
SELECT column1 as myColumn
FROM match
UNION ALL
SELECT column2 as myColumn
FROM match
 ) x
GROUP BY myColumn
HAVING cnt > 1
  ) y
) OR column2 in (
SELECT myColumn
FROM(

SELECT count(*) as cnt, myColumn
FROM (
SELECT column1 as myColumn
FROM match
UNION ALL
SELECT column2 as myColumn
FROM match
 ) x
GROUP BY myColumn
HAVING cnt > 1
  ) y
)
UNION
SELECT column2 as newColumn
FROM match WHERE column1 in (

SELECT myColumn
FROM(

SELECT count(*) as cnt, myColumn
FROM (
SELECT column1 as myColumn
FROM match
UNION ALL
SELECT column2 as myColumn
FROM match
 ) x
GROUP BY myColumn
HAVING cnt > 1
  ) y
) OR column2 in (
SELECT myColumn
FROM(

SELECT count(*) as cnt, myColumn
FROM (
SELECT column1 as myColumn
FROM match
UNION ALL
SELECT column2 as myColumn
FROM match
 ) x
GROUP BY myColumn
HAVING cnt > 1
  ) y
)