태그 보관물: mysql

mysql

다른 테이블의 값을 기준으로 한 테이블을 즉시 업데이트하는 방법은 무엇입니까? 합니다. CREATE TABLE `country`

아래와 같이 ips라는 이름의 테이블이 있습니다.

CREATE TABLE `ips` (
 `id` int(10) unsigned NOT NULL DEFAULT '0',
 `begin_ip_num` int(11) unsigned DEFAULT NULL,
 `end_ip_num` int(11) unsigned DEFAULT NULL,
 `iso` varchar(3) DEFAULT NULL,
 `country` varchar(150) DEFAULT NULL
) ENGINE=InnoDB

countryid국가 테이블 의이 테이블에 필드 가 있다고 가정 합니다.

CREATE TABLE `country` (
 `countryid` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
 `ordering` smallint(5) unsigned NOT NULL DEFAULT '0',
 `iso` char(2) NOT NULL,
 PRIMARY KEY (`countryid`)
) ENGINE=InnoDB

ips 테이블에는 약 100,000 개의 레코드가 있습니다. 다음과 같은 시나리오에 대한 쿼리가 있습니까 : 가 같은지
확인하고 ips.iso같으면 country.isocountry.coutryid를 해당 레코드에 추가하십시오. 나는 그것을 할 수있는 방법을 생각할 수 없었습니다. 그 방법을 알고 있습니까?



답변

UPDATE ips INNER JOIN country
    ON ips.iso = country.iso
SET ips.countryid = country.countryid

MySQL 업데이트 다중 테이블 구문 사용 :

14.2.11 업데이트 구문

아이소 컬럼에는 길이와 데이터 유형이 서로 다릅니다. 실제로 2 자리와 3 자리의 두 가지 ISO 코드 세트가 있으므로 실제로는이 열에 참여하지 못할 수 있습니다.

ISO 3166-1

USING (iso)대신 조인 조건 ON ips.iso = country.iso도 작동합니다.


답변

@Cade Roux의 솔루션은 구문 오류를 제공합니다 .mysql 5.5.29의 올바른 오류는 다음과 같습니다.

UPDATE ips 
INNER JOIN country
    ON ips.iso = country.iso
SET ips.countryid = country.countryid

“FROM”키워드없이


답변

이 구문은 더 잘 읽을 수 있습니다

UPDATE country p, ips pp
SET pp.countryid = p.countryid
WHERE pp.iso = p.iso


답변

@Cade에게 감사하지만 간단한 해결책을 찾았습니다.

update ips set countryid=(select countryid from country where ips.iso=country.iso )


답변