복붙노트

[SQL] MySQL은 - 모든 동일한 구조이지만 서로 다른 데이터를 여러 테이블에서 데이터를 선택

SQL

MySQL은 - 모든 동일한 구조이지만 서로 다른 데이터를 여러 테이블에서 데이터를 선택

좋아, 여기에 내가 모두 동일한 데이터 구조로 약 5 개 테이블로 설정 데이터베이스가 내 딜레마이다. 이 데이터는 위치 파악을 위해 약 4.5 백만 레코드의 총 분할이 방식으로 분리된다.

단 하나의 테이블이 필요한 시간과 모든의 대부분은 물론이다. 그러나 때때로 데이터 테이블의 2 이상에서 필요하며 사용자 정의 열을 기준으로 정렬 할 필요가있다. 내가하는 데 문제가있는 곳이다.

데이터 열 :

id, band_name, song_name, album_name, genre

MySQL의 문 :

SELECT * from us_music, de_music where `genre` = 'punk'

MySQL은이 오류를 뱉어 :

#1052 - Column 'genre' in where clause is ambiguous

물론,이 잘못을하고있는 중이 야. 치료 사람은 나를 위해이 되거하려면?

해결법

  1. ==============================

    1.난 당신이, 라 연합 절을 찾고 있다고 생각

    난 당신이, 라 연합 절을 찾고 있다고 생각

    (SELECT * from us_music where `genre` = 'punk')
    UNION
    (SELECT * from de_music where `genre` = 'punk')
    
  2. ==============================

    2.단일 테이블과 happer 것 같은데. 다섯은 동일한 스키마를 가지고, 때로는 그들이 하나 개의 테이블에 모든 것을 넣어 하나 개의 테이블 점에서 온 것처럼 제시 될 필요.

    단일 테이블과 happer 것 같은데. 다섯은 동일한 스키마를 가지고, 때로는 그들이 하나 개의 테이블에 모든 것을 넣어 하나 개의 테이블 점에서 온 것처럼 제시 될 필요.

    (나는 당신이 지역화했다 이후 테이블 간의 차이가 그것의 언어를 있으리라 믿고있어)를 5 개 언어를 구별하는 데 사용할 수있는 새 열을 추가합니다. 450 만 개 기록을 가지고 대해 걱정하지 마십시오. 실제 데이터베이스는 크기 조정 문제를 처리 할 수 ​​있습니다. 올바른 인덱스를 추가하면 하나의 테이블로 처리에는 문제가 없을 것입니다.

  3. ==============================

    3.위의 답변의 모든 유효, 또는 다른 방법뿐만 아니라 데이터베이스 이름을 포함하는 테이블 이름을 확장하는 것입니다 - 예를 :

    위의 답변의 모든 유효, 또는 다른 방법뿐만 아니라 데이터베이스 이름을 포함하는 테이블 이름을 확장하는 것입니다 - 예를 :

    SELECT * from us_music, de_music where `us_music.genre` = 'punk' AND `de_music.genre` = 'punk'
    
  4. ==============================

    4.열은 두 테이블에 나타납니다 때문에 us_music.genre 또는 de_music.genre로 완전히 같은 (또는 종류) 필드를 지정해야하지만 다음 그들과 합류하려고한다면 당신은 일반적으로 두 개의 테이블을 지정하는 것 모호 어떤 방식. 일반적으로 잘보다는 데이터 집합을 임의로 분할에 별개의 파일로 데이터 집합을 분리 할 비록 당신이 때때로 분할 된 테이블이라고 다루는 구조. 데이터베이스 구조를 담당하고있어 그때 국가 코드를 포함하는 별도의 "기원"필드에 하나 개의 큰 테이블을 구축하려는 데이터를 분할하는 좋은 이유가 없다하지만 경우에 당신은 아마 합법적 인 성능 이유로하고있어 . 어느 쪽이든 당신은 http://dev.mysql.com/doc/refman/5.0/en/union.html 또는 http://dev.mysql.com을 병합 데이터베이스 엔진을 사용하여 관심있는 테이블을 조인 조합을 사용하여 /doc/refman/5.1/en/merge-storage-engine.html.

    열은 두 테이블에 나타납니다 때문에 us_music.genre 또는 de_music.genre로 완전히 같은 (또는 종류) 필드를 지정해야하지만 다음 그들과 합류하려고한다면 당신은 일반적으로 두 개의 테이블을 지정하는 것 모호 어떤 방식. 일반적으로 잘보다는 데이터 집합을 임의로 분할에 별개의 파일로 데이터 집합을 분리 할 비록 당신이 때때로 분할 된 테이블이라고 다루는 구조. 데이터베이스 구조를 담당하고있어 그때 국가 코드를 포함하는 별도의 "기원"필드에 하나 개의 큰 테이블을 구축하려는 데이터를 분할하는 좋은 이유가 없다하지만 경우에 당신은 아마 합법적 인 성능 이유로하고있어 . 어느 쪽이든 당신은 http://dev.mysql.com/doc/refman/5.0/en/union.html 또는 http://dev.mysql.com을 병합 데이터베이스 엔진을 사용하여 관심있는 테이블을 조인 조합을 사용하여 /doc/refman/5.1/en/merge-storage-engine.html.

  5. ==============================

    5.두 테이블을 스팬 원래 시도는 암시가 가입 만듭니다. 이 테이블 방법의 상태와 결합 할 수 분리하기 때문에 가장 경험이 풍부한 SQL 프로그래머에 의해 눈살을 찌푸리게한다.

    두 테이블을 스팬 원래 시도는 암시가 가입 만듭니다. 이 테이블 방법의 상태와 결합 할 수 분리하기 때문에 가장 경험이 풍부한 SQL 프로그래머에 의해 눈살을 찌푸리게한다.

    노조는 그대로 테이블에 대한 좋은 해결책이지만, 그들은 괜찮은 색인으로 하나 개의 테이블에 투입 할 수없는 이유가 없어야합니다. 나는 3 자릿수로 큰 테이블 증가 쿼리 속도에 대한 올바른 인덱스를 추가 보았다.

  6. ==============================

    6.거대한 데이터 거래 시간 원인 노조 문. 2 단계에서 선택을 수행하는 것이 좋다 :

    거대한 데이터 거래 시간 원인 노조 문. 2 단계에서 선택을 수행하는 것이 좋다 :

  7. from https://stackoverflow.com/questions/409705/mysql-selecting-data-from-multiple-tables-all-with-same-structure-but-differen by cc-by-sa and MIT license