반환하려는 정보를 처리하는 하위 쿼리 또는 조인 또는 다른 결과로 수정 된 결과를 반환하는 SQL 문을 어떻게 작성합니까? 예를 들어SQL : "다른"행의 값을 기반으로 행을 선택하는 "NOT IN"대안?
:
INSERT INTO `bowlers` (`name`, `team`) VALUES
('homer', 'pin pals'),
('moe', 'pin pals'),
('carl', 'pin pals'),
('lenny', 'pin pals'),
('homer', 'The homer team'),
('bart', 'The homer team'),
('maggie', 'The homer team'),
('lisa', 'The homer team'),
('marge', 'The homer team'),
('that weird french guy', 'The homer team');
그래서
homer
자신의 팀에 결정할 수없는, 그래서 그는 모두의 :
CREATE TABLE bowlers (
bowling_id int4 not null primary key auto_increment,
name text,
team text
);
누군가가 잘못 하나 개 이상의 팀에있을 수 있습니다. Do'h!
나는 the homer team
에있는 모든 사람을 알고 싶습니다. 누구도 pin pals
팀에 속해 있지 않습니다. 내가 할 수있는 최선은 이것이다 :
SELECT a.name, a.team
FROM bowlers a where a.team = 'The homer team'
AND a.name
NOT IN (SELECT b.name FROM bowlers b WHERE b.team = 'pin pals');
이 결과 : 당신이 알고,
+-----------------------+----------------+
| name | team |
+-----------------------+----------------+
| bart | The homer team |
| maggie | The homer team |
| lisa | The homer team |
| marge | The homer team |
| that weird french guy | The homer team |
+-----------------------+----------------+
5 rows in set (0.00 sec)
, 화려한!
서브 쿼리는 B가 몇 행의 D. 위대한는 A에 수천의 수백 꽤 나쁜 쿼리의 각 결과를 실행하는 것입니다으로 성능이 떨어질 수 행.
더 좋은 방법은 무엇입니까? 나는 대부분 자기 조인이 트릭을 할 것이라고 생각하지만, 어떻게 해야할지에 대해 머리를 감쌀 수는 없다.
사용하지 않고이 작업을 수행하는 다른 방법이 있습니까는 NOT IN(SELECT ...)
또한
, 문제의이 유형의 이름은 무엇입니까?
왼쪽으로 외부로 다시 가입하는 것이 좋습니다. –