[SQL] 어떻게 다른 테이블에 일치하는 항목이있는 행을 선택하려면?
SQL어떻게 다른 테이블에 일치하는 항목이있는 행을 선택하려면?
나는 데이터베이스 응용 프로그램에 대한 몇 가지 유지 보수 작업을하고 그리고 난 기쁨의 기쁨, 한 테이블의 값은 외부 키의 스타일로 사용되는 경우에도, 테이블에는 외래 키 제약 조건이 없습니다 것을 발견했습니다.
이미 순진 수정되었습니다 이전 오류의 테이블에서 잘못된 데이터의 전체 부하가 있기 때문에하지 않는 행을 찾기 위해, 내가 필요 나는이 컬럼에 FK 제약 조건을 추가하기 위해 노력하고있어,하지만 난 그것을 찾는거야 다른 테이블에 일치하고 삭제합니다.
나는 웹 쿼리 이런 종류의 몇 가지 예를 발견했지만, 그들은 모두 오히려 설명보다는 예제를 제공하는 것, 그리고 그들이 일하는 이유를 이해하지 않습니다.
사람이 차라리이이 혼란의 모든 테이블에 대해 SO에 실행 오는 것보다, 이러한 쿼리 나 자신을 할 수 있도록, 그것은하고있어 사항 다른 테이블에 일치하는 모든 행을 반환하는 쿼리, 무엇을 구성하는 방법을 나에게 설명 할 수 어떤 FK 제약?
해결법
-
==============================
1.다음은 간단한 쿼리는 다음과 같습니다
다음은 간단한 쿼리는 다음과 같습니다
SELECT t1.ID FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.ID = t2.ID WHERE t2.ID IS NULL
핵심 포인트는
-
==============================
2.더 강력한이기 때문에 내가 LEFT의 경우에, 당신은 즉 더 정확하게, 당신이 가입하고자하는 행을 선택할 수 있습니다 EXISTS 표현을 사용하면 조인 된 테이블에 무엇이 모두를 가지고 가야 가입하세요. 그것의 효율성은 널 (null) 테스트에 가입 LEFT의 경우와 같이 아마 동일합니다.
더 강력한이기 때문에 내가 LEFT의 경우에, 당신은 즉 더 정확하게, 당신이 가입하고자하는 행을 선택할 수 있습니다 EXISTS 표현을 사용하면 조인 된 테이블에 무엇이 모두를 가지고 가야 가입하세요. 그것의 효율성은 널 (null) 테스트에 가입 LEFT의 경우와 같이 아마 동일합니다.
SELECT t1.ID FROM Table1 t1 WHERE NOT EXISTS (SELECT t2.ID FROM Table2 t2 WHERE t1.ID = t2.ID)
-
==============================
3.
SELECT id FROM table1 WHERE foreign_key_id_column NOT IN (SELECT id FROM table2)
표 1은 당신의 외래 키 제약 조건을 추가하려는 열을 가지고 있지만, foreign_key_id_column의 값은 모든 테이블 2의 ID와 일치하지 않습니다.
-
==============================
4.어디 T2는 제약 조건을 추가하는되는 테이블은 다음과 같습니다
어디 T2는 제약 조건을 추가하는되는 테이블은 다음과 같습니다
SELECT * FROM T2 WHERE constrained_field NOT IN ( SELECT DISTINCT t.constrained_field FROM T2 INNER JOIN T1 t USING ( constrained_field ) )
그리고 그 결과를 삭제합니다.
-
==============================
5.우리는 다음과 같은 두 테이블을 보자 (급여 및 직원)
우리는 다음과 같은 두 테이블을 보자 (급여 및 직원)
지금은 급여가 아닌 직원 테이블에서 레코드를 원한다. 우리는 3 가지 방법으로이 작업을 수행 할 수 있습니다 :
select * from employee where id not in(select e.id from employee e inner join salary s on e.id=s.id)
select * from employee e left outer join salary s on e.id=s.id where s.id is null
select * from employee e full outer join salary s on e.id=s.id where e.id not in(select id from salary)
-
==============================
6.비슷한 질문에서 여기 MySQL의 내부 쿼리가 다른 표에없는 기록을 얻기 위해 가입 작업이있어
비슷한 질문에서 여기 MySQL의 내부 쿼리가 다른 표에없는 기록을 얻기 위해 가입 작업이있어
SELECT * FROM bigtable LEFT JOIN smalltable ON bigtable.id = smalltable.id WHERE smalltable.id IS NULL
smalltable는 기록을 누락 한 위치를 모든 기록이 어디에서 Bigtable은입니다. 쿼리 목록이 아닙니다 smalltable에 존재하지만,에서 Bigtable에있는 모든 레코드. 당신은 어떤 다른 매칭 기준으로 ID를 대체 할 수있다.
-
==============================
7.아래 그림과 같이 뷰를 선택할 수 있습니다 :
아래 그림과 같이 뷰를 선택할 수 있습니다 :
CREATE VIEW AuthorizedUserProjectView AS select t1.username as username, t1.email as useremail, p.id as projectid, (select m.role from userproject m where m.projectid = p.id and m.userid = t1.id) as role FROM authorizeduser as t1, project as p
및 선택 또는 업데이트에 대한 뷰에서 다음 작업 :
select * from AuthorizedUserProjectView where projectid = 49
이는 충전 된 비 매칭 컬럼는 null 즉, 아래 그림에 도시 된 바와 같이 결과를 산출한다.
[Result of select on the view][1]
-
==============================
8.나는 그나마 하나 @AdaTheDev에 비해 (최적화 된 알았 )하지만이 사람은) 내가 나를 위해이어야 (사용할 때 빠른 것 같다
나는 그나마 하나 @AdaTheDev에 비해 (최적화 된 알았 )하지만이 사람은) 내가 나를 위해이어야 (사용할 때 빠른 것 같다
SELECT id FROM table_1 EXCEPT SELECT DISTINCT (table1_id) table1_id FROM table_2
당신은 어떤 다른 특정 속성을 얻고 싶은 경우에 당신은 사용할 수 있습니다 :
SELECT COUNT(*) FROM table_1 where id in (SELECT id FROM table_1 EXCEPT SELECT DISTINCT (table1_id) table1_id FROM table_2);
-
==============================
9.First_table SELECT * FROM 마이너스 또 다른 SELECT * FROM
First_table SELECT * FROM 마이너스 또 다른 SELECT * FROM
-
==============================
10.당신은 이런 식으로 뭔가를 할 수
당신은 이런 식으로 뭔가를 할 수
SELECT IFNULL(`price`.`fPrice`,100) as fPrice,product.ProductId,ProductName FROM `products` left join `price` ON price.ProductId=product.ProductId AND (GeoFancingId=1 OR GeoFancingId IS NULL) WHERE Status="Active" AND Delete="No"
-
==============================
11.어떻게 두 테이블에 일치하는 항목이있는 행을 선택하려면?
어떻게 두 테이블에 일치하는 항목이있는 행을 선택하려면?
select * from [dbo].[EmppDetails] e right join [Employee].[Gender] d on e.Gid=d.Gid where e.Gid is Null union select * from [dbo].[EmppDetails] e left join [Employee].[Gender] d on e.Gid=d.Gid where d.Gid is Null
from https://stackoverflow.com/questions/4076098/how-to-select-rows-with-no-matching-entry-in-another-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL은 벤 다이어그램으로 조인 (0) | 2020.03.24 |
---|---|
[SQL] 어떻게 중복 된 항목을 삭제하려면? (0) | 2020.03.24 |
[SQL] 2008 스튜디오 SQL 서버 관리에서 모든 테이블을 검색하여 문자열 찾기 (0) | 2020.03.24 |
[SQL] 트리 데이터 구조에 대한 데이터베이스 구조 (0) | 2020.03.24 |
[SQL] "EEE MMM은 HH를 위해 dd : MM : SS의 ZZZ 일"로 날짜 형식 java.sql.Date (0) | 2020.03.23 |