[SQL] 쿼리 3 개 테이블 "NOT IN"MySQL은
SQL쿼리 3 개 테이블 "NOT IN"MySQL은
내가 3 테이블 물론, 등급 및 평가가 있습니다. 나는 두 테이블 등급 및 평가를 비교합니다. 테이블 등급의 데이터가 테이블 평가에 존재하지 않는 경우, 데이터가 나타납니다 (출력)
" select Grade.ID_Courses,Course.ID_Courses,Grade.NAME,
Course.NAME, Grade.ID_Courses,
Evaluation.NAME,
Evaluation.Year,
Grade.Year
from Grade, Course, Evaluation
WHERE
Grade.ID_Courses=Course.ID_Courses AND
Grade.NAME=JOHN and
Grade.Year=1 and
Evaluation.NAME=GRADE.NAME and
Grade.ID_Courses NOT IN (SELECT ID_Courses FROM Evaluation where NAME=JOHN and Year=1 )
GROUP BY Grade.ID_Courses"
문제는 이름 존 테이블 평가하지 않을 때 다음 더 출력이 출력되지 않고있다이다.
해결법
-
==============================
1.전염병의 경우처럼 NOT IN 피
전염병의 경우처럼 NOT IN 피
SELECT ID_Courses FROM Evaluation where `NAME`='JOHN' and Year=1
이제까지 NULL을 포함 할 수 있습니다. 대신, 사용하지 EXISTS 또는 왼쪽 조인
명시 적 사용은 1980 년대 스타일이 WHERE 절을 사용하여 조인하지, 조인
SQL NOT IN () 위험
create table mStatus ( id int auto_increment primary key, status varchar(10) not null ); insert mStatus (status) values ('single'),('married'),('divorced'),('widow'); create table people ( id int auto_increment primary key, fullName varchar(100) not null, status varchar(10) null );
구리 ँ K 1 :
truncate table people; insert people (fullName,`status`) values ('John Henry','single'); select * from mstatus where `status` not in (select status from people);
** 3 행, 예상대로 **
Chunk2 :
truncate table people; insert people (fullName,`status`) values ('John Henry','single'),('Kim Billings',null); select * from mstatus where status not in (select status from people);
행이, 허하지?
물론이 '잘못'입니다. 그것은 3 치 논리의 SQL의 사용에서 발생 NULL의 존재에 의해 구동이 아닌 값이 누락 (또는 UNKNOWN) 정보를 나타낸다. NOT IN, Chunk2으로는 다음과 같이 번역된다 :
status NOT IN ('married', 'divorced', 'widowed', NULL)
이것은 동일합니다 :
NOT(status='single' OR status='married' OR status='widowed' OR status=NULL)
3 치 논리의 규칙에 따라 표현은 "상태 = NULL"UNKNOWN으로 평가하고, NOT UNKNOWN는 UNKNOWN으로 평가합니다. 그 결과, 모든 행이 필터링되고 쿼리는 빈 집합을 반환합니다.
가능한 해결책은 다음과 같습니다 :
select s.status from mstatus s left join people p on p.status=s.status where p.status is null
또는 사용하지 존재
-
==============================
2.이 문제를 해결하기 위해 조인 사용해보십시오
이 문제를 해결하기 위해 조인 사용해보십시오
select g.*, e.*,c.* from grade g inner join evaluation e on g.ID_COURSES <> e.ID_COURSES and g.year <> e.year inner join COURSE c on c.ID_COURSES = g.ID_COURSES ;
from https://stackoverflow.com/questions/32175497/mysql-not-in-query-3-tables by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 이노로의 MyISAM의 모든 테이블을 변환하는? (0) | 2020.04.12 |
---|---|
[SQL] INSERT INTO 또는 두 개의 조건 UPDATE (0) | 2020.04.12 |
[SQL] 단일 매개 변수에 여러 값 전달 (0) | 2020.04.12 |
[SQL] 주어진 문자열을 분할 및 사례 문을 준비 (0) | 2020.04.12 |
[SQL] 같은 SELECT SQL 쿼리에서 SUM ()에서 계산 비율 (0) | 2020.04.12 |