2017-12-20 3 views
0

MySQL에 처음 소개되었습니다. 쿼리를 작동 시키려고하지만 계속 올바른 결과를 얻지 만 복제됩니다. 나는 완전히 잃었어요중복 된 결과를 반환하는 MySQL 쿼리

CREATE TABLE band (
    band_id  INT, 
    band_name VARCHAR(50), 
    genre  VARCHAR(20), 
    PRIMARY KEY (band_id)); 

CREATE TABLE musician (
    person_id INT, 
    name  VARCHAR(50), 
    band_id  INT, 
    PRIMARY KEY (person_id), 
    FOREIGN KEY (band_id) REFERENCES band(band_id)); 

CREATE TABLE tour(
    tour_name VARCHAR(50), 
    band_id  INT, 
    PRIMARY KEY (tour_name), 
    FOREIGN KEY (band_id) REFERENCES band(band_id)); 

CREATE TABLE venue(
    venue_name VARCHAR(30), 
    hire_cost INT, 
    PRIMARY KEY (venue_name)); 

CREATE TABLE concert(
    concert_id  INT, 
    date    DATE, 
    tour_name  VARCHAR(50), 
    venue_name  VARCHAR(30), 
    ticket_sales  INT, 
    PRIMARY KEY  (concert_id), 
    FOREIGN KEY  (tour_name) REFERENCES tour(tour_name), 
    FOREIGN KEY  (venue_name) REFERENCES venue(venue_name)); 

:

여기

SELECT DISTINCT 
    band.band_name, concert.venue_name 
FROM 
    band, concert 
WHERE 
    concert.date="2012-10-17" AND band_name 
IN 
    (SELECT band.band_name FROM band WHERE band.band_id 
IN 
    (SELECT tour.band_id from tour where tour.tour_name 
IN 
    (SELECT tour_name from concert where concert.date="2012-10-17"))); 

DDL 쿼리를합니다. 어떤 도움이라도 대단히 감사하겠습니다. 테이블을 조인

+0

예. JOIN에 대해 알아보십시오. 초보자를위한 책이나 튜토리얼은 도움이됩니다. – Strawberry

+0

뚜렷한 절이 중복을 제거하지 못하는 것에 놀랐습니다. 질문에 샘플 데이터를 텍스트로 추가 할 수 있습니까? –

답변

1

, 당신은 where 절에 모든 조건을 쌓아하지 않는 길을 가야하는 것입니다 :

SELECT DISTINCT 
    b.band_name, c.venue_name 
FROM concert c 
    join venue v on v.venue_name = c.venue_name -- thats how those 2 tables connect 
    join tour t on t.tour_name = c.tour_name -- thats how those 2 tables connect 
    join band b on b.band_id = t.band_id  -- thats how those 2 tables connect 
WHERE c.date="2012-10-17"    -- and this gives you all the bandnames and 
          -- venuenames that play on every concert on this date 

DB를이 쿼리를 최적화하고 필요하지 않는 테이블에 조인에 의한 수 있습니다이 방법 너무 많은 데이터를 스캔 할 수 있습니다.