2009-04-26 5 views
1

나는 다음과 같은 쿼리가 :행이 없는지 확인하는 방법?

SELECT rowid FROM table1 ORDER BY RANDOM() LIMIT 1 

을뿐만 아니라 나는 다른 테이블 (표 3)를 가지고있다. 이 테이블에는 column1_id 및 table2_id 열이 있습니다. table1_id는 table1의 행에 대한 링크이고 table2_id는 다른 테이블의 행에 대한 링크입니다.

내 쿼리에서 table3에 정의 된 결과 만 가져 오려고합니다. table1_id 열에 table1 rowid가있는 자만. 특정 table1 rowid를 참조하는 열이 전혀 없을 수도 있으므로이 경우 수신하지 않으려합니다.

어떻게하면이 목표를 달성 할 수 있습니까?

업데이트 :

SELECT rowid FROM table1 
WHERE rowid IN (SELECT table1_id FROM table3 WHERE table1_id = table1.rowid) 
ORDER BY RANDOM() LIMIT 1 

답변

1
SELECT rowid FROM table1 
WHERE rowid IN (SELECT DISTINCT table1_id FROM table3) 
ORDER BY RANDOM() LIMIT 1; 

이 쿼리는 "table3에 항목이 table1에서 임의의 행에서 선택"의미 : 나는이 작동하지 않습니다 다음과 같은 쿼리를 시도했다.

테이블 1의 모든 행은 table3에서 적어도 한 번 참조되는 한 (DISTINCT) 선택 될 가능성이 동일합니다.

두 개 이상의 결과를 얻으려는 경우 "ORDER BY RANDOM() LIMIT 1"절을 제거해야합니다.

1

이상의 단지 ROWID를 선택하려는 가정 할 때, 당신은 당신이 관심있는 테이블 간의 JOIN에서 선택 해야합니다. SQLite는 표준 가입하기 기능의 전체 세트가없는, 그래서 당신 LEFT OUTER JOIN을 사용할 수 있도록 쿼리를 다시 작업해야합니다.

SELECT table1.rowid, table1.other_field 
FROM table3 
    LEFT OUTER JOIN table1 ON table3.table1_id = table1.rowid 
ORDER BY RANDOM() 
LIMIT 1; 
관련 문제