2017-12-28 5 views
0

내 Specialization 테이블의 주요 키는 복잡하며 Specialization_id 및 Specialty_id (Specialty 테이블의 외래 키)라는 두 개의 열로 구성됩니다. 기존 전문 분야의 새로운 SPECIALIZATION을 작성하여 삽입 쿼리를 작성하려고합니다. 테이블에 몇 가지 전문화가 이미 있습니다. id = 1 인 1 개의 전문 분야에 대한 기본 키는 (1,1) (2,1)처럼 보이며 id = 2는 (1,2) (2,2)처럼 보입니다. 이제 특성화 테이블에 새로운 특성화 테이블을 추가하겠습니다. 그러나이 특성화는 기존 특성을 참조해야합니다. 나의 생각은 내가 조항 '으로하고, 여전히, 나는 점점 오전 오류없이 노력했습니다쿼리 오류 추가

INSERT INTO Specialization (Specialization_name, Specialization_id, Specialty_id) 
VALUES('Network technologies','(SELECT Max(Specialization_id) FROM Specialization WHERE Specialty_id = '2')+1', '2'); 

입니다. 여기서 어떻게해야합니까?

답변

1

하위 쿼리가 인용되어 있기 때문에 주 오류는 따옴표입니다. 하위 쿼리는 따옴표로 처리되어 문자열이 아닌 쿼리로 처리됩니다. dstudeba 말한 것처럼

INSERT INTO Specialization (Specialization_name, Specialization_id, Specialty_id) 
SELECT 'Network technologies' As a, Max(Specialization_id)+1 As b, 2 As c 
FROM Specialization WHERE Specialty_id = 2 

그러나, 새로운 ID를 생성하기위한 일련에에 의존하는 것은 아마도 똑똑 : 당신은 메인 쿼리가없는 경우

또한, 하위 쿼리를 사용할 필요가 없습니다.

+0

이 코드는 다음과 같은 오류를 표시합니다. 조건 식의 데이터 형식이 일치하지 않습니다. 저는 Specialization_name을 짧은 텍스트로, Specialization_id를 숫자로, Specialty_id를 숫자로 사용합니다. 그리고 전체적으로 나는이 쿼리를 얻지 못했습니다. VALUES (..)는 어디에 있습니까? 또한 내 쿼리가 따옴표없이 작동하지 않는 경우 다음 오류가 발생합니다. 쿼리 입력에 하나 이상의 테이블이나 쿼리가 있어야합니다. – RaiseLtwiCe

+0

'VALUES'가 없습니다. INSERT INTO ... SELECT 절입니다. [here] (https://support.office.com/en-us/article/INSERT-INTO-Statement-e12fd58b-33b1)에 설명되어 있습니다. -479c-8221-e9f245ab8d24). 유형이 일치하지 않으면 각 입력란에 데이터 유형을 입력하십시오. 'Specialization_id'가 숫자가 아닌 경우,'Max'는 예기치 않은 결과를 반환 할 것입니다. (specialty_id가 숫자라고 가정하기 위해 편집 됨) –

+0

저는 Specialization_name을 숫자로, Specialization_id를 숫자로, Specialty_id를 숫자로 사용합니다. – RaiseLtwiCe

2

MySQL 또는 Oracle과 같은 데이터베이스에서 프로그래밍 방식으로 기본 키를 증가시키지 마십시오. 대신 데이터베이스를 디자인 할 때 필드를 AUTOINCREMENT으로 설정해야합니다. 에 INSERT 문을 바꿀 것

: 만 훨씬 더 쉽게하지 않은

INSERT INTO Specialization (Specialization_name, Specialty_id) 
VALUES('Network technologies', '2') 

, 그것은 안전합니다.

편집 : Specialty_id은 문자열입니까? 나는 그것이 어떤 종류의 숫자 일 것이라고 생각할 것이다.

+0

전 전문가가 아니지만 복잡한 기본 키가 올바로 작동하지 않습니다. 나는 어딘가에서 우리는 복잡한 PK를 가져야 만하는 구성을 읽을 때 그것을 만들었습니다. – RaiseLtwiCe

+0

@RaiseLtwiCe 복합 기본 키를 언급하고 있습니까? 올바른 경우 복합 기본 키를 자동 증가시키지 않지만 수동으로 증가시키지는 않습니다. 기본 키를 사용하여 수동으로 할당해야하는 작업은 무엇입니까? – dstudeba

+0

오타를 사용하여 죄송합니다. 예, 기본 키는 합성어입니다. 나는 일반적으로 상황을 설명하려고 노력할 것이다. 나는 특성화 및 전문 테이블을 가지고 있습니다. 특수화 테이블의 레코드는 특수 테이블을 필요로하지 않고는 존재할 수 없습니다. 그래서, 내 지식에 따르면, Specialization 테이블의 PK는 (Specialization_id, Specialty_id (전문 테이블의 FK))입니다. specialization_id를 증가 시키면 일부 ID가 손실됩니다 (예 : PK (1,1) (2,1)). 다른 specialty_id를 참조해야 할 경우 (3,2) (4,2)가됩니다. (1,2)의 (2,2). – RaiseLtwiCe