2013-10-02 4 views
0

this 링크를 사용하고 있습니다.여러 값을 가진 sql 열 (cpp 파일의 쿼리 구현)

나는 3 개 테이블 (두 가지 간단한 테이블 PersonItem 그들을 연결하는 세 번째 PersonItem) 내 데이터베이스에 이클립스 내 CPP 파일을 연결했다. 여러 항목을 가지고

CREATE TABLE PersonsItems(PersonsItemsId int not null auto_increment primary key, 
Person_Id int not null, 
Item_id int not null, 
constraint fk_Person_id foreign key (Person_Id) references Person(PersonId), 
constraint fk_Item_id foreign key (Item_id) references Items(ItemId)); 

그래서, 다음 C 임베디드 SQL과 내가 원하는 사람 : 세 번째 테이블에서 나는 그런 간단한 기본 및 두 개의 외래 키를 사용합니다.

내 코드 :

mysql_query(connection, \ 
    "INSERT INTO PersonsItems(PersonsItemsId, Person_Id, Item_id) VALUES (1,1,5), (1,1,8);"); 

    printf("%ld PersonsItems Row(s) Updated!\n", (long) mysql_affected_rows(connection)); 

    //SELECT newly inserted record. 
    mysql_query(connection, \ 
    "SELECT Order_id FROM PersonsItems"); 

    //Resource struct with rows of returned data. 
    resource = mysql_use_result(connection); 

    // Fetch multiple results 
    while((result = mysql_fetch_row(resource))) { 
     printf("%s %s\n",result[0], result[1]); 
    } 

내 결과가

-1 PersonsItems Row(s) Updated! 
5 

하지만 난 그 이유

-1 PersonsItems Row(s) Updated! 
5 8 

가 somone에이 말해 줄 수 싶습니다 VALUES (1,1,5), (1,1,8);

함께 이 일이 일어나지 않았나요? 친절하게 생각합니다.

Duplicate entry '1' for key 'PRIMARY' 

당신은 기본 키가 너무 고유해야되는 PersonsItemsId에 두 번 1를 삽입하려고하기 때문에 (이것은이다 :

답변

1

나는 첫 번째 삽입 다음 오류와 함께 실패 때문이 의심 또한 auto_increment를 사용하면 값을 지정할 필요가 전혀 없습니다.); 영향을받는 행이 -1, 왜

이런 이유로이 줄 : 첫 번째 문은 (1,1,5) 이미 삽입되어 있던 값 이후에 실패, 그래서 여전히 일이 있기 때문에 만 5을보고있다

printf("%s %s\n",result[0], result[1]); 

테이블의 데이터 행

INSERT INTO PersonsItems(PersonsItemsId, Person_Id, order_id) 
VALUES (1,1,5), (1,1,8) 
ON DUPLICATE KEY UPDATE Person_id = VALUES(person_Id), Order_ID = VALUES(Order_ID); 

Example on SQL Fiddle

또는 personsItemsID에 대한 값을 지정하도록 AUTO_INCREMENT 그 일을하지 않습니다

나는 당신이 ON DUPLICATE KEY UPDATE 구문을 사용할 필요가 당신이 기대하는 행동을 얻을 생각 :

INSERT INTO PersonsItems(Person_Id, order_id) 
VALUES (1,5), (1,8); 

Example on SQL Fiddle

1

두 가지 검색어에 오타 또는 실수가 있다고 생각합니다.

당신은 "PersonsItemsId, person_id로, ITEM_ID"

INSERT INTO PersonsItems(PersonsItemsId, Person_Id, Item_id) VALUES (1,1,5), (1,1,8) 

를 삽입 한 다음 select 문은 "ORDER_ID"를 선택합니다.

SELECT Item_id FROM PersonsItems 

편집 추가 :

기본 키가 그래서 당신 돈 autoincrement입니다, 8 요청으로 5를 달성하기 위해

SELECT Order_id FROM PersonsItems 

는 두 번째 쿼리 할 필요가 삽입 문에 전달해야합니다 (사실 1을 두 번 통과하면 오류가 발생합니다).

는 당신은 다른 열을 삽입해야합니다

INSERT INTO PersonsItems(Person_Id, Item_id) VALUES (1,5), (1,8) 
+0

가 아니, 그건 중요하지 않았다 죄송합니다. 어디에서나 Item_id를 사용합니다. 그것은 동일합니다. 나는 이것을 유감스럽게 생각한다. 편집 됨. –

관련 문제