저는 SQL
과 Sqlite
을 처음 접했습니다. 그렇지만이 학문적 인 이유 때문에 내가 직접 만든 더러운 데이터베이스로 기초를 배우려고 노력하는 중입니다. . 어휘가 정확하지 않으면 용서해주십시오. 나는 여전히 학습 과정에 있습니다.SQLite : 동일한 외래 키를 공유하는 모든 항목을 선택하십시오
각기 다른 종류의 엔티티로 각각의 테이블 세트를 만들었지 만 비슷한 점이 있습니다 : 서로 다른 값을 갖는 동일한 Foreign Key
의 여러 오리지널을 공유합니다.
표 M1 : 2 개 항목 엔티티 모든 이전 데이터 열이 Unique Key
이하 (표 N)에 Foreign Keys
있다
+------------+---------+--------+-------+-------+
Primary Key Unique ID Data1 Data2 Data3
+------------+---------+--------+-------+-------+
1 y1 103021 103022 103001
:
+------------+---------+--------+-------+
Primary Key Unique ID Data1 Data2
+------------+---------+--------+-------+
1 x1 103021 103022
표 M2 : 3 개 항목 엔터티
+------------+---------+--------+-------+
Primary Key Unique ID Data1 Data2
+------------+---------+--------+-------+
1 100002 ... ...
2 103001 ... ...
3 103021 ... ...
4 103022 ... ...
내가해야하는 일은 다음을 공유하는 모든 엔티티를 추출하는 것입니다. 주어진 고유 항목 (My Foreign Key
). 예를 들어 103022
두 엔티티가 부여됩니다 : x1
및 y1
.
저는 며칠 동안 노력해 왔으며 JOIN
문과 함께 필요한 정보를 얻을 수있었습니다.
INNER 가입 :
SELECT N.id, T1.id FROM N INNER JOIN M1 as T1 on T1.data1=N.id OR T1.data2=N.id
CROSS이 가입 :
SELECT N.id, T1.id FROM N CROSS JOIN M1 as T1 WHERE T1.data1=N.id OR T1.data2=N.id
내가 시간과 파이썬 실시간으로 사후 처리를에서 하나 개의 테이블을 할 경우 INNER JOIN
에만 작동합니다, 나는 이해 CROSS JOIN
은 내 데이터의 데카르트 생성물을 생성하고 다른 테이블과 부울 조건을 추가 할 때 너무 많은 메모리를 쉽게 사용할 수 있습니다. 그래서 나는 그것이 선택 사항이 아니라고 생각합니다.
내가 생각하지 못한 다른 방법이 있습니까?
감사합니다.
원하는 출력을 알 수 있습니까? –
1. M1, M2 & N 또는 원하는 출력물에 대한 텍스트가 명확하지 않습니다. 명확하게 설명하기에 충분한 문장을 사용하십시오. [mcve]에 읽고 읽습니다. 어떤 열이 FK인지 다른 열에 정확히 알려주십시오. 2. 구현에 대한 오해가 있습니다. 이 두 조인은 모든 실제 DBMS에서 동일한 방식으로 구현됩니다. https://stackoverflow.com/q/44917/3404097 또한, 구현의 최적화에 대해 걱정하기 전에 쿼리의 일부가 의미하는 것과 직접적인 쿼리를 작성하는 방법에 대해 더 많이 배워야합니다. – philipxy
@philipxy : 우선, 나는 비판 할 필요가없고 배울 점을 분명히했다. 내 질문에 귀하의 모든 의문에 대한 답변을 쉽게 찾을 수있는 반면 귀하의 링크를 읽었습니다. 그것은별로 도움이되지 않습니다. 반면에 INNER와 CROSS Join이 동일한 효과를 나타낼 수는 없지만 CROSS join을 사용하면 프로세스가 중단 될 수 있습니다. – Chang