[SQL] SQL 쿼리 : 대신 하위 쿼리의 "AND"를 통해 여러 행 시뮬레이션
SQLSQL 쿼리 : 대신 하위 쿼리의 "AND"를 통해 여러 행 시뮬레이션
tagid 및 콘텐츠 ID를 : 나는 두 개의 열이있는 "태그"테이블이 있다고 가정. 각 행은 내용의 조각에 할당 된 태그를 나타냅니다. 나는 나에게 tagids 334, 338, 342 태그 콘텐츠의 모든 조각의 콘텐츠 ID를 줄 것이다 쿼리를합니다.
될이 작업을 수행하는 "쉬운"방법 (의사) :
select contentid from tags where tagid = 334 and contentid in (
select contentid from tags where tagid = 338 and contentid in (
select contentid from tags where tagid = 342
)
)
그러나, 내 직감이 작업을 수행하려면 더 확장 방법은 빠르고, 더 나은가 있음을 알려줍니다. 예를 들어, 나는 12 개 태그의 교차점을 찾기 위해 필요한 어떤 경우? 이 신속 끔찍한 얻을 수 있습니다. 어떤 아이디어?
편집 :이 또한이 우수한 블로그 게시물에 포함되어 있음을 밝혀졌습니다.
해결법
-
==============================
1.
SELECT contentID FROM tags WHERE tagID in (334, 338, 342) GROUP BY contentID HAVING COUNT(DISTINCT tagID) = 3 --In general SELECT contentID FROM tags WHERE tagID in (...) --taglist GROUP BY contentID HAVING COUNT(DISTINCT tagID) = ... --tagcount
-
==============================
2.여기 개체 및 태그의 매우 큰 데이터베이스에 나를 위해 훨씬 빠르게보다 더 가공 한 솔루션입니다. 이 세 태그 교차로에 대한 예입니다. 그것은 단지 체인 많은 사람들이 동일한 개체를 나타 내기 위해 객체 태그 테이블 (objtags)에 조인 및 WHERE 절에 태그 ID를 규정 :
여기 개체 및 태그의 매우 큰 데이터베이스에 나를 위해 훨씬 빠르게보다 더 가공 한 솔루션입니다. 이 세 태그 교차로에 대한 예입니다. 그것은 단지 체인 많은 사람들이 동일한 개체를 나타 내기 위해 객체 태그 테이블 (objtags)에 조인 및 WHERE 절에 태그 ID를 규정 :
SELECT w0.objid FROM objtags t0 INNER JOIN objtags t1 ON t1.objid=t0.objid INNER JOIN objtags t2 ON t2.objid=t1.objid WHERE t0.tagid=512 AND t1.tagid=256 AND t2.tagid=128
이 빠르게 실행 내가 왜 아무 생각이 없습니다. 그것은 뮤직 브레인 서버에서 검색 코드에 의해 영감을했다. 포스트 그레스에서 이렇게, 나는 보통 HAVING COUNT (...) 솔루션을 통해 ~ 8-10x 속도 향상을 얻을.
-
==============================
3.나는이 생각할 수있는 유일한 다른 방법 :
나는이 생각할 수있는 유일한 다른 방법 :
select a.contentid from tags a inner join tags b on a.contentid = b.contentid and b.tagid=334 inner join tags c on a.contentid = c.contentid and c.tagid=342 where a.tagid=338
-
==============================
4.이 더 나은 경우 나도 몰라하지만 더 유지 보수 수 있습니다
이 더 나은 경우 나도 몰라하지만 더 유지 보수 수 있습니다
select contentid from tags where tagid = 334 intersect select contentid from tags where tagid = 338 intersect select contentid from tags where tagid = 342
당신은 원래의 솔루션으로 나쁜로하지 않을 것이다 동적으로 구축해야 할 것이다.
-
==============================
5.SQL 유형은 무엇? MS SQL 서버, 오라클, MySQL은?
SQL 유형은 무엇? MS SQL 서버, 오라클, MySQL은?
에서 SQL Server는이 동일시하지 않는다 :
select contentid from tags where tagid IN (334,338,342)
from https://stackoverflow.com/questions/163887/sql-query-simulating-an-and-over-several-rows-instead-of-sub-querying by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 평가의 SQL UPDATE 순서 (0) | 2020.05.04 |
---|---|
[SQL] 더블 콜론 (: :) 표기 SQL (0) | 2020.05.04 |
[SQL] MySQL의 내부 쿼리 여러 테이블을 조인 (0) | 2020.05.03 |
[SQL] SQL Server 2005의 계층 적 쿼리 (0) | 2020.05.03 |
[SQL] PBKDF2의 SQL 구현이 있습니까? (0) | 2020.05.03 |