2017-01-26 6 views
2

SQL 문장의 회사 코드에이 이상한 버그가 있습니다. 기본적으로 테이블에서 모든 행을 업데이트하는 것은 우리가 원했던 것이 하나만 업데이트했을 때입니다. 코드는 다음과 같습니다.전체 테이블을 선택하는 SQL의 아포스트로피

UPDATE table SET 'disconnections'=value WHERE 'connections'=(SELECT MAX('connections') FROM table) 

여기서 어포 스트로피는 분명히 틀린 곳에서 사용됩니다. 그래서 이것은 테이블의 모든 행을 업데이트하고있었습니다. 우리는 그들을 제거하고 문장은 예상대로 작동했습니다. 그게 무슨 상관이야?

감사합니다!

+1

어떤 데이터베이스를 사용하고 있습니까? 당신은 그 캐릭터가 '아니라고'확신합니까? –

+0

태그에 올바른 DBMS를 입력하십시오. – ADyson

+0

ANSI SQL에서 작은 따옴표는 문자열 리터럴 용입니다. ''어떤 텍스트 ''. 식별자에 큰 따옴표를 사용하십시오. ' "column-name"'을 사용한다. – jarlh

답변

3

문제는 MAX('connections')입니다. 분명히 단일 할당량 대신에``를 사용하고자합니다. ''. 귀하의 경우 'connections'은 필드 이름이 아닌 문자열 상수입니다. 그래서 MAX(constant) = constant. 이 조건은 이름이`connections` 인 필드에 의존하지 않으므로 테이블의 모든 레코드에 대해 TRUE입니다.

필자는 MySQL이라고 생각합니다. 필드 이름을 참조하려면 '대신'을 사용해야합니다.