"두 개 이상의 테이블에 참여하는 방법"에서 많은 양의 스레드를 보았지만 그 스레드 중 아무 것도 내 문제를 해결하지 못하는 것 같습니다. 나는 세 개의 테이블이 있습니다 teams
, persons
및 payfiles
MySQL에서 3 개의 테이블을 "합치는"방법
teams
표는 다음과 같습니다
DROP TABLE IF EXISTS `teams`;
CREATE TABLE IF NOT EXISTS `teams` (
`team_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`leader` varchar(32) NOT NULL,
PRIMARY KEY (`team_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=30;`
persons
테이블 :
DROP TABLE IF EXISTS `persons`;
CREATE TABLE IF NOT EXISTS `persons` (
`team_id` int(2) DEFAULT '0',
`hash` varchar(32) NOT NULL,
UNIQUE KEY `hash` (`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
payfiles
테이블 :
DROP TABLE IF EXISTS `payfiles`;
CREATE TABLE IF NOT EXISTS `payfiles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`hash` varchar(32) NOT NULL,
`deals_passed` int(2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1298 ;
테이블에는 훨씬 더 많은 열이 있지만 단순화를 위해 테이블을 잘라 냈습니다. 1
, Team 1
, afaf7878af78a
후자는 팀 리더의 고유 한 해시 :
teams
표는 다음과 같은 방법으로 기록이 포함되어 있습니다.
테이블 명
는 예를 에 대한 모든 개인 정보 및 고유 해시, 을 포함, 그 해시 또한 팀 1.payfile
또한 "해시"가 테이블의 선두 주자입니다 afaf7878af78a
입니다 홍길동 열에는 직원의 수표 계산에 필요한 모든 정보가 들어 있습니다.
경영진은 회사가 얼마나 많은 것을하고 있는지에 대한 전반적인 비전을 원합니다. 그들은 모든 단일 팀이 초래되어 얼마나 많은 돈을보고 싶어요.
내가 여기에 직면하고있어 문제 "팀"
에 의해 그룹에 이익을하려고 내 최고의 지금까지 노력이
입니다SELECT hash, SUM(deals_passed) as deals FROM payfiles JOIN persons ON persons.hash = payfiles.hash GROUP BY payfiles.hash
하지만 나는 데이터베이스의 구조를 변경하지 않고 소득의 팀 일반 비전으로 팀을 생성하기 위해 데이터베이스를 조회 할 수있는 최적의 방법을 볼 수 없습니다.
예 : John Doe 및 Jane Doe는 "팀 1"에 속해 있으며 각각 500 달러 및 600 달러를 가져 왔습니다.
내가 좋아하는 뭔가를 생성 할 :
"가져온 팀 1 $ (1100)"
내 다른 데이터베이스의 구조를 변경하고 payfile 테이블에 새 열을 추가하는 것입니다. 이러한 열은 team_id
이 될 것이므로 쉽게 쿼리 할 수 있지만 데이터베이스에는 현재 약 10,000 개의 레코드가 있으므로 team_id
열을 고려하지 않은 10K 레코드를 업데이트하고 GUI에 많은 변경을가합니다. 그게 가장 쉽고 최선의 선택이라면 그렇게 할거예요.
감사합니다.
매력처럼 작동합니다. 정말 고마워! 하지만 조금 혼란 스럽습니다. – ILikeTacos
최신 'LEFT JOIN'은 각 팀에 속한 팀을 어떻게 "아나요"? – ILikeTacos
'USING (hash)'는 새 테이블 "해시"열을 이전 테이블의 "해시"와 연결합니다.이 경우 payfiles.hash는 새 테이블 팀을 이전 테이블에 연결하는 'USING (team_id)'과 동일합니다. team_id,이 경우 persons.team_id, 체인을 얻은 것입니다. payfiles- (hash) -persons- (team_id) -teams –