2017-12-20 11 views
0

MySQLにはまったく新しいものです。クエリを動作させようとしても正しい結果が得られますが、重複しています。ここで重複した結果を返すMySQLクエリ

がクエリ

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です:

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)); 

私は完全に失われたんです。どんな助けでも大歓迎です。テーブルの結合

+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は、クエリを最適化し、必要としないテーブルに参加するに起因することができますこの方法非常に多くのデータをスキャンします。

関連する問題