mysql의 다른 테이블에 존재하는 레코드가 존재하도록 요구

PixMach

이것은 현재 제 뇌를 녹이고 있지만 그것을 할 방법이 있어야합니다. 기본적으로 쿼리는 다음과 같습니다.

SELECT r.* FROM records r
JOIN users u ON u.job_id = r.job_id  
LEFT JOIN records_requirements rr ON rr.record_id = r.id
INNER JOIN user_requirements ur on ur.requirement_id = rr.requirement_id

기본적으로 내가하려는 것은 사용자와 동일한 작업 ID를 가진 모든 레코드를 가져오고 레코드에 요구 사항이있는 경우 사용자가 user_requirements 테이블에 일치하는 레코드가있는 경우에만 선택하는 것입니다. 사용자에게 요구 사항이없는 경우 레코드를 선택하지 마십시오.

따라서 job_id가 같고 요구 사항이 없거나 job_id가 같고 사용자에게 요구 사항이없는 모든 레코드를 가져옵니다.

앨런

테스트하지 않고 다음과 같이 작동해야한다고 생각합니다.

SELECT DISTINCT r.*
FROM records r
INNER JOIN users u ON u.job_id = r.job_id
LEFT JOIN records_requirements rr ON rr.record_id = r.id
LEFT JOIN user_requirements ur ON ur.requirement_id = rr.requirement_id 
  AND ur.user_id = u.id
WHERE 
  (
    (rr.record_id IS NULL) 
      OR 
    (rr.record_id IS NOT NULL AND ur.requirement_id IS NOT NULL)
  )
  AND u.id = ?

그것이하는 일은 요구 사항을 허용하지 않기 위해 요구 사항을 기록하기 위해 조인하는 것입니다. 또한 요구 사항이 있지만 일치하는 사용자 요구 사항이없는 레코드가 여전히 풀링되도록 사용자 요구 사항에 조인하는 것입니다.

그런 다음 where 테스트를 사용하여 null 레코드 요구 사항을 허용하거나 레코드 및 사용자 요구 사항이 모두 적용됩니다.

마지막으로 SELECT DISTINCT를 사용하여 레코드 당 하나의 결과 만 얻도록합니다.

편집 : 다음과 같이 SQL Server를 사용한 빠른 테스트 :

DECLARE @Users TABLE (job_id int)
DECLARE @Records TABLE (id int, job_id int)
DECLARE @Records_Requirements TABLE (requirement_id int, record_id int)
DECLARE @User_Requirements TABLE (requirement_id int)

INSERT INTO @Users VALUES (1)

INSERT INTO @Records VALUES (1, 1)
INSERT INTO @Records VALUES (2, 1)
INSERT INTO @Records VALUES (3, 1)

INSERT INTO @Records_Requirements VALUES (1, 1)
INSERT INTO @Records_Requirements VALUES (2, 2)

INSERT INTO @User_Requirements VALUES (2)

SELECT DISTINCT r.*
FROM @Records r
INNER JOIN @Users u ON u.job_id = r.job_id
LEFT JOIN @Records_Requirements rr ON rr.record_id = r.id
LEFT JOIN @User_Requirements ur on ur.requirement_id = rr.requirement_id
WHERE (rr.record_id IS NULL) OR (rr.record_id IS NOT NULL AND ur.requirement_id IS NOT NULL)

결과 :

id  job_id
2   1
3   1

테스트 데이터에 맞다고 생각합니다. 아마도 MySQL은 다르게 작동하지만 그렇지는 않습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

하나의 MySql 테이블에 존재하고 다른 테이블에는 존재하지 않는 레코드를 가져 오는 방법

분류에서Dev

테이블의 한 열 데이터가 다른 테이블에 존재하는지 확인하는 C # 코드

분류에서Dev

하나의 테이블에 모든 레코드가 존재하지 않는 다대 1의 역 세트

분류에서Dev

하나 개의 테이블 내에 존재하는 모든 항목이 다른 존재하는지 확인 MYSQL

분류에서Dev

다른 테이블의 두 열 모두에 존재하지 않는 MySQL의 행 가져 오기

분류에서Dev

존재하는 경우 MYSQL 선택 (다른 테이블에서)

분류에서Dev

R 값이 다른 테이블에 존재하는지 평가

분류에서Dev

django 1.10의 다른 테이블에 존재하는 레코드를 확인하려면 delete_selected를 재정의하십시오.

분류에서Dev

테이블 1, UPDATE 테이블 2, ELSE IF 레코드가 테이블 1의 열이있는 UPDATE 테이블 2에 존재하지 않는 경우 레코드

분류에서Dev

다른 테이블에 존재하지 않는 테이블에서 레코드 찾기

분류에서Dev

Laravel은 해당 레코드의 순서가 다른 테이블에 의존하는 테이블에서 모든 레코드를 찾습니다.

분류에서Dev

하나의 쿼리에서 다른 레코드가있는 mysql 두 테이블

분류에서Dev

SQL, 테이블 A의 레코드가 테이블 B에 존재하는지 확인

분류에서Dev

SQL, 테이블 A의 레코드가 테이블 B에 존재하는지 확인

분류에서Dev

MySQL 하나의 테이블에 존재하지만 다른 테이블에는없는 행 표시

분류에서Dev

Rails 6의 Ruby gem에 존재하는 jQuery 코드를 요구하는 방법

분류에서Dev

레코드가 존재하지 않아도 행을 반환합니다. 한 테이블에 2 개의 필터가 있습니다.

분류에서Dev

다른 테이블의 jsonb 항목에 존재하지 않는 날짜 별 PostgreSQL 가져 오기

분류에서Dev

SQLite 쿼리는 다른 테이블에 존재하지 않는 모든 레코드를 선택합니다.

분류에서Dev

다른 테이블의 특정 조건에 대해 다른 테이블에 존재하지 않는 모든 레코드를 한 테이블에서 선택하는 방법은 무엇입니까?

분류에서Dev

MYSQL 값이 존재하지 않는 경우 다른 테이블에 값 삽입

분류에서Dev

데이터가 다른 테이블 MYSQL에 존재하지 않는 테이블에서 결과를 출력하는 방법

분류에서Dev

한 테이블에서 다른 테이블에 존재하지 않고 세 번째 테이블에서 무시되는 레코드 찾기

분류에서Dev

한 테이블의 데이터가 아직 존재하지 않는 경우에만 다른 테이블에 삽입

분류에서Dev

내 navbar가 다른 구성 요소에 대해 "비 존재"하는 이유는 무엇입니까?

분류에서Dev

다른 테이블에 존재하는 테이블에서 행의 %를 찾으십니까?

분류에서Dev

findViewById는 구성 요소의 ID가 존재하더라도 null을 반환합니다.

분류에서Dev

다른 테이블에 존재하지 않는 행을 두 번째 테이블의 데이터로 조인 [SQL]

분류에서Dev

mysql의 다른 테이블에 존재하지 않는 경우 다른 테이블에서 데이터를 선택하는 방법

Related 관련 기사

  1. 1

    하나의 MySql 테이블에 존재하고 다른 테이블에는 존재하지 않는 레코드를 가져 오는 방법

  2. 2

    테이블의 한 열 데이터가 다른 테이블에 존재하는지 확인하는 C # 코드

  3. 3

    하나의 테이블에 모든 레코드가 존재하지 않는 다대 1의 역 세트

  4. 4

    하나 개의 테이블 내에 존재하는 모든 항목이 다른 존재하는지 확인 MYSQL

  5. 5

    다른 테이블의 두 열 모두에 존재하지 않는 MySQL의 행 가져 오기

  6. 6

    존재하는 경우 MYSQL 선택 (다른 테이블에서)

  7. 7

    R 값이 다른 테이블에 존재하는지 평가

  8. 8

    django 1.10의 다른 테이블에 존재하는 레코드를 확인하려면 delete_selected를 재정의하십시오.

  9. 9

    테이블 1, UPDATE 테이블 2, ELSE IF 레코드가 테이블 1의 열이있는 UPDATE 테이블 2에 존재하지 않는 경우 레코드

  10. 10

    다른 테이블에 존재하지 않는 테이블에서 레코드 찾기

  11. 11

    Laravel은 해당 레코드의 순서가 다른 테이블에 의존하는 테이블에서 모든 레코드를 찾습니다.

  12. 12

    하나의 쿼리에서 다른 레코드가있는 mysql 두 테이블

  13. 13

    SQL, 테이블 A의 레코드가 테이블 B에 존재하는지 확인

  14. 14

    SQL, 테이블 A의 레코드가 테이블 B에 존재하는지 확인

  15. 15

    MySQL 하나의 테이블에 존재하지만 다른 테이블에는없는 행 표시

  16. 16

    Rails 6의 Ruby gem에 존재하는 jQuery 코드를 요구하는 방법

  17. 17

    레코드가 존재하지 않아도 행을 반환합니다. 한 테이블에 2 개의 필터가 있습니다.

  18. 18

    다른 테이블의 jsonb 항목에 존재하지 않는 날짜 별 PostgreSQL 가져 오기

  19. 19

    SQLite 쿼리는 다른 테이블에 존재하지 않는 모든 레코드를 선택합니다.

  20. 20

    다른 테이블의 특정 조건에 대해 다른 테이블에 존재하지 않는 모든 레코드를 한 테이블에서 선택하는 방법은 무엇입니까?

  21. 21

    MYSQL 값이 존재하지 않는 경우 다른 테이블에 값 삽입

  22. 22

    데이터가 다른 테이블 MYSQL에 존재하지 않는 테이블에서 결과를 출력하는 방법

  23. 23

    한 테이블에서 다른 테이블에 존재하지 않고 세 번째 테이블에서 무시되는 레코드 찾기

  24. 24

    한 테이블의 데이터가 아직 존재하지 않는 경우에만 다른 테이블에 삽입

  25. 25

    내 navbar가 다른 구성 요소에 대해 "비 존재"하는 이유는 무엇입니까?

  26. 26

    다른 테이블에 존재하는 테이블에서 행의 %를 찾으십니까?

  27. 27

    findViewById는 구성 요소의 ID가 존재하더라도 null을 반환합니다.

  28. 28

    다른 테이블에 존재하지 않는 행을 두 번째 테이블의 데이터로 조인 [SQL]

  29. 29

    mysql의 다른 테이블에 존재하지 않는 경우 다른 테이블에서 데이터를 선택하는 방법

뜨겁다태그

보관