MySQL-를 선택하 여러 테이블에서 데이터에 모두 동일한 구조를 그러나 다른 데이터

StackOverflow https://stackoverflow.com/questions/409705

문제

확인,여기 나의 딜레마가 있는 데이터베이스 설정에 대해 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

분명히,나는 이 일을 잘못입니다.누구에 빛을 발산 이니까?

도움이 되었습니까?

해결책

나는 당신이 찾고 있다고 생각합니다 노동 조합 조항, la

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

다른 팁

그것은 소리 같은 것 happer 하나의 테이블.오일 스키마,그리고 때로는 필요하로 제시되는 경우 그들 중 하나에서 왔는 테이블 포인트를 넣어 하나에 모든 것 테이블.

새 열을 추가하는 데 사용할 수 있는 구분 중에서 다섯 개 국어(답게 다른 언어들 사이의 테이블 때문에 당신이 말한 그것을 위해 현지화).에 대한 걱정하지 마십시오 4.5 백만 기록합니다.어떠한 실제 데이터베이스를 처리할 수 있는 크기를 아무 문제 없습니다.추가 올바른 인덱스,당신은 아들을 다루는 문제 같습니다.

위의 답변 중 하나는 유효하거나 대안적인 방법은 데이터베이스 이름을 포함하도록 테이블 이름을 확장하는 것입니다.

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

열은 두 테이블에 나타나기 때문에 모호합니다. US_MUSIC.GENRE 또는 DE_MUSIC.GENRE와 같이 WHERE (또는 정렬) 필드를 완전히 지정해야하지만 일반적으로 함께 합류하려면 두 개의 테이블을 지정합니다. 어떤 패션. 다루는 구조는 때때로 데이터 세트를 임의로 분할하기보다는 데이터 세트를 고유 한 파일로 분리하는 데 수행되지만 일반적으로 분할 된 테이블이라고합니다. 데이터베이스 구조를 담당하고 데이터를 분할할만한 충분한 이유가 없다면 국가 코드가 포함 된 추가 "원산지"필드로 하나의 큰 테이블을 구축하지만 합법적 인 성능 이유를 위해이를 수행하고 있습니다. . 노조를 사용하여 관심있는 테이블에 가입하십시오. http://dev.mysql.com/doc/refman/5.0/en/union.html 또는 Merge 데이터베이스 엔진을 사용하여 http://dev.mysql.com/doc/refman/5.1/en/merge-storage-engine.html.

두 테이블 모두에 걸쳐 원래의 시도는 암시 적 조인을 만듭니다. 이것은 가장 숙련 된 SQL 프로그래머에 의해 눈살을 찌푸립니다. 테이블을 어떻게 조건과 결합하도록 분리하기 때문입니다.

그만큼 UNION 테이블이있는 좋은 솔루션이지만, 색인이 적당한 인덱싱으로 하나의 테이블에 넣을 수없는 이유는 없어야합니다. 올바른 색인을 큰 테이블 증가 쿼리 속도에 3 배로 추가하는 것을 보았습니다.

그만큼 union 진술은 거대한 데이터의 거래 시간을 유발합니다. 2 단계로 선택을 수행하는 것이 좋습니다.

  1. ID를 선택하십시오
  2. 그런 다음 메인 테이블을 선택하십시오
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top