2014-05-12 2 views
0

동일한 열이있는 테이블이 3 개 (향후 6 개까지) 있습니다.2 개 열의 조합이 고유하지 않은 3 개의 테이블을 결합합니다.

통합해야합니다 (예 : 동일한 열에서 통합). 이 외에도 - 열은 2 열 조합을 기반으로 고유하지 않아야합니다! 그물에 몇 가지 예가 있지만, 모두 하나의 열에 대해 WHERE 을 기반으로 고유 한 열 값을 제외하는 방법을 보여줍니다. 내 경우에는 두 개의 열 (Col1과 Col2 조합)이 있습니다. 여기

이 도식은 다음과 같습니다

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

enter image description here

enter image description here

그리고 여기 (3-테이블) 최종 쿼리를 상상하는 방법이다 같을 것이다

올바른 길?

P. 참고로 단일 열 솔루션

Multiple NOT distinct

How to select non "unique" rows

How to Select Every Row Where Column Value is NOT Distinct

편집 :

내가 허용 대답에서 코드를 사용하고 추가 한 추가 검색 기준 :

검색 COL1과 COL2 :

-by SOUNDEX

-by (다른 테이블 COL1) COL1 등

-by (다른 테이블 COL1) 등 COL1

+0

다양한 SQL? MS-SQL, PostgreSQL, MySQL 등? 당신이 사용할 수있는 Common Table Expressions의 능력을 가지고 있다면, 나는 뭔가를 훔칠 수있다. ..... –

+0

@AjVJsy That 's sqllite db – Alex

+1

http :// /www.sqlite.org/lang_with.html - 이중 CTE 방식을 사용할 수 있습니다. ALL 테이블을 함께 첫 번째 CTE에 넣고 두 번째 GROUPED BY Cols1 & 2 HAVING> 1을 입력 한 다음 주 SELECT에서 두 번째 테이블에있는 첫 번째 CTE의 모든 행을 반환 할 수 있습니다. 당신이 더 필요하다면 나는 몇 시간 안에 해골 개요를 제공 할 수있다 .. –

답변

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!

+0

감사합니다! 오늘 밤 저녁에 시험 데이터를 준비해 드리겠습니다. – Alex

+0

몇 가지 검사가 매력처럼 작동합니다! 예외 - 선택을위한 추가 조건을 추가해야했습니다. 게시물 업데이트를 참조하십시오. – Alex

관련 문제