다음과 같은 두 개의 테이블이 있습니다.테이블에서 고유 한 행 쌍을 임의로 선택하려면 어떻게합니까?
CREATE TABLE people (
id INT NOT NULL,
PRIMARY KEY (id)
)
CREATE TABLE pairs (
person_a_id INT,
person_b_id INT,
FOREIGN KEY (person_a_id) REFERENCES people(id),
FOREIGN KEY (person_b_id) REFERENCES people(id)
)
사람들 테이블에서 사람 쌍을 무작위로 선택하고 해당 테이블을 선택한 후 무작위로 선택 쌍을 쌍 테이블에 추가합니다. person_a_id는 쌍의 하위 ID를 가진 사람을 항상 참조합니다 (쌍의 순서는 관련이 없으므로).
문제는 내가 같은 쌍을 두 번 선택하고 싶지 않기 때문에 무작위로 선택한 쌍을 반환하기 전에 쌍 테이블을 검사해야합니다.
합리적이고 효율적으로 단일 SQL 쿼리를 사용하여이 작업을 수행 할 수 있습니까?
(Java Persistence API를 사용하여이 작업을 수행하고 있지만 잘하면 응답을 JPA 코드로 변환 할 수 있음)
그것은 가능할 수도 있지만 예쁘지 않을 것입니다. – Matchu
세트 기반 접근 방식에서 이것이 어떻게 가능할 지 모르겠습니다. 커서를 사용하여이를 해결할 수 있습니다 (그래서 단일 저장 프로 시저에서 수행 할 수 있습니다). 가장 큰 장애물은 쌍 테이블에 추가하는 임의의 쌍마다 선택 풀이 줄여야한다는 것입니다. – Matthew
MySQL의 체크 제약에 대한 지원이 부족한 부분입니다.이것은 person_a_id
Thomas