programing

MySQL 삽입 쿼리가 WHERE 절과 함께 작동하지 않습니다.

projobs 2022. 10. 2. 15:06
반응형

MySQL 삽입 쿼리가 WHERE 절과 함께 작동하지 않습니다.

이 쿼리의 문제:

INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;

★★★★★★★★★★★★★★★★ 없이 합니다.WHERE절을 클릭합니다.SQL sql sql sql sql 。

MySQL INSERT 구문은 WHERE 절을 지원하지 않으므로 현재 쿼리는 실패합니다.고객님의id열이 고유하거나 기본 키입니다.

ID가 1인 새 행을 삽입하려는 경우 다음을 사용해야 합니다.

INSERT INTO Users(id, weight, desiredWeight) VALUES(1, 160, 145);

원하는 무게/필요한 무게/필요한 무게의 변경을 시도하는 경우ID가 1인 기존 행의 가중치 값:

UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;

원하는 경우 INSERT를 사용할 수도 있습니다.다음과 같은 키 중복 구문 사용:

INSERT INTO Users (id, weight, desiredWeight) VALUES(1, 160, 145) ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145

또는 이와 같은 경우도 있습니다.

INSERT INTO Users SET id=1, weight=160, desiredWeight=145 ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145

이 '만나면'이라고 한다면요.id열은 자동 증분 열이므로 INSERT에서 모두 생략하고 mysql이 정상적으로 증분하도록 할 수 있습니다.

WHERE 절과 VALUES 절을 결합할 수 없습니다.내가 알기로는 두 가지 선택권이 있어

  1. INSERT 값 지정

    INSERT INTO Users(weight, desiredWeight) 
    VALUES (160,145)
    
  2. SELECT 문을 사용하여 삽입

    INSERT INTO Users(weight, desiredWeight) 
    SELECT weight, desiredWeight 
    FROM AnotherTable 
    WHERE id = 1
    

UPDATE 쿼리에 WHERE 절을 사용합니다.삽입할 때는 행이 존재하지 않는다고 가정합니다.

OP의 진술은 다음과 같습니다.

UPDATE Users SET 무게 = 160, 원하는 경우무게 = 45, 여기서 id = 1;

MySQL에서 INSERT 또는 UPDATE를 원하는 경우 WHERE 절과 함께 REPLACE 쿼리를 사용할 수 있습니다.WHERE가 존재하지 않으면 삽입되고 그렇지 않으면 업데이트됩니다.

EDIT

나는 Bill Karwin의 요점이 논평에서 벗어나 매우 명백하게 만들기에 충분히 중요하다고 생각한다.감사합니다, 빌, MySQL을 사용한 지 너무 오래되어 REPLACE에 문제가 있었던 것을 기억하고 있었습니다만, 그것이 무엇인지 잊어버렸습니다.찾아봤어야 했는데.

MySQL의 REPLACE는 그렇게 동작하지 않습니다.DELETE(행이 존재하지 않는 경우 no-op일 수 있음)를 실행한 후 INSERT를 실행합니다.트리거 및 외부 키 의존성에 대한 결과를 생각해 보십시오.대신 INSERT...를 사용합니다.중복된 키 업데이트 시.

삽입물에 WHERE 조항이 있다고 생각하지 않습니다.

삽입 쿼리는 where 키워드*를 지원하지 않습니다.

하위 선택 문장에 where 조건을 사용할 수 있으므로 조건이 적용됩니다.하위 선택을 사용하여 복잡한 삽입을 수행할 수 있습니다.

예를 들어 다음과 같습니다.

INSERT INTO suppliers
(supplier_id, supplier_name)
SELECT account_no, name
FROM customers
WHERE city = 'Newark';

삽입문에 "선택"을 배치하면 여러 번 삽입을 빠르게 수행할 수 있습니다.

이런 유형의 삽입을 사용하면 삽입되는 행의 수를 확인할 수 있습니다.삽입을 수행하기 전에 다음 SQL 문을 실행하여 삽입할 행 수를 결정할 수 있습니다.

SELECT count(*)
FROM customers
WHERE city = 'Newark';

EXISTS 조건을 사용하면 중복된 정보를 삽입하지 않도록 할 수 있습니다.

예를 들어 프라이머리 키가 client_id인 clients라는 이름의 테이블이 있는 경우 다음 문을 사용할 수 있습니다.

INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, 'advertising'
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);

이 문은 하위 선택과 함께 여러 레코드를 삽입합니다.

단일 레코드를 삽입하려면 다음 문을 사용할 수 있습니다.

INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, 'IBM', 'advertising'
FROM dual
WHERE not exists (select * from clients
where clients.client_id = 10345);

듀얼 테이블을 사용하면 값이 현재 테이블에 저장되어 있지 않은 경우에도 select 문에 값을 입력할 수 있습니다.

자세한 내용은 Where 절을 삽입하는 방법을 참조하십시오.

이 질문에 대한 정답은 다음과 같습니다.

a) 삽입하기 전에 [IF]를 선택합니다.

INSERT INTO Users( weight, desiredWeight ) 
  select val1 , val2  from tableXShoulatNotBeUsers
  WHERE somecondition;

b) 레코드가 이미 존재하는 경우 삽입 대신 업데이트를 사용합니다.

 INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;

그래야 한다

Update Users set weight=160, desiredWeight=145  WHERE id = 1;

c) 동시에 업데이트 또는 삽입을 원하는 경우

Replace Users set weight=160, desiredWeight=145  WHERE id = 1;

Note):- you should provide values to all fields else missed field in query 
        will be set to null

d) 같은 테이블에서 레코드를 복제하려면 삽입할 테이블에서 선택할 수 없으므로 주의해 주십시오.

 create temporary table xtable ( weight int(11), desiredWeight int(11) ;

 insert into xtable (weight, desiredWeight) 
    select weight, desiredWeight from Users where [condition]

 insert into Users (weight, desiredWeight) 
    select weight , desiredWeight from xtable;

이 정도면 대부분의 시나리오를 커버할 수 있을 것 같아요.

INSERT 문을 실행할 때 WHERE를 사용할 수 없습니다.

 INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;

다음 항목이어야 합니다.

 INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 );

WHERE 부분은 SELECT 문에서만 작동합니다.

SELECT from Users WHERE id = 1;

또는 UPDATE 스테이트먼트:

UPDATE Users set (weight = 160, desiredWeight = 145) WHERE id = 1;

INSERT와 WHERE를 사용하는 방법

INSERT INTO MYTABLE SELECT 953,'Hello',43 WHERE 0 in (SELECT count(*) FROM MYTABLE WHERE myID=953);이 경우 존재 테스트와 같습니다.두 번 이상 실행하면 예외는 없습니다.

지정된 행에 값을 삽입하는 올바른 형식은 다음과 같습니다.

UPDATE table SET column = value WHERE columnid = 1

Microsoft SQL Server에 쓰는 경우에도 마찬가지입니다.

INSERT INTO table(column) VALUES (130) WHERE id = 1;

mysql에서 테이블을 갱신해야 합니다.

=에 삽입 테이블에 행 추가

업데이트 = 특정 행을 업데이트합니다.

삽입문에 where 절은 무엇을 기술합니까?일치하는 항목이 없습니다. 행이 아직 없습니다.

사용자 입력에 따라 조건부 삽입을 수행할 수 있습니다.이 쿼리는 입력 변수 '$userWeight' 및 '$userDesired'인 경우에만 삽입됩니다.무게'는 공백이 아닙니다.

INSERT INTO Users(weight, desiredWeight )
select '$userWeight', '$userDesiredWeight'  
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';

프라이머리 키를 지정하여 각 행의 변경된 테이블의 새 열에 일부 값을 삽입할 경우 -->

  1. UPDATE <table_name> SET <column_name> = '<value> WHERE <primary_key> = <primary_value>

INSERT가 실제로 where 절을 가질 수 있는 상황에 따라 달라집니다.

예를 들어 폼의 값을 일치시키는 경우.

Consider INSERT INTO Users(name,email,weight, desiredWeight) VALUES (fred,bb@yy.com,160,145) WHERE name != fred AND email != bb@yy.com

말이 되지 않나요?

가장 간단한 방법은 IF를 사용하여 키 제약을 위반하는 것입니다.이 방법은 INSERT IGNORE에만 적용되지만 INSERT에서 구속조건을 사용할 수 있습니다.

INSERT INTO Test (id, name) VALUES (IF(1!=0,NULL,1),'Test');

끝나고WHERE조건을 지정한 절은 데이터를 가져오거나 행을 업데이트하는 데 사용됩니다.데이터를 삽입할 때는 행이 존재하지 않는 것으로 가정합니다.

그래서 문제는 ID가 1인 행이 있느냐는 것입니다.그 경우 MySQL UPDATE를 사용하고, 그렇지 않으면 MySQL INSERT를 사용합니다.

데이터 삽입에 대해 특정 레코드 아니요를 지정하는 경우 사용하는 것이 좋습니다.UPDATE대신 성명INSERT진술.

질문에 쓴 이런 유형의 쿼리는 더미 쿼리와 같습니다.

문의처:-

INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;

여기서는 id=1을 지정하므로 를 사용하는 것이 좋습니다.UPDATE기존 레코드를 갱신하는 스테이트먼트.사용을 권장하지 않습니다.WHERE경우에 대한 조항INSERT를 사용해 주세요.UPDATE.

업데이트 쿼리 사용 중 :-

UPDATE Users SET weight=160,desiredWeight=145 WHERE id=1;

어떤 경우에도 WHERE-clause를 INSERT-INTO-VALUES와 함께 사용할 수 있습니까?

대답은 절대 아니다.

INSERT INTO 뒤에 WHERE 절 추가 중...VALUES...는 잘못된 SQL이며 구문 분석되지 않습니다.

MySQL에서 반환되는 오류는 다음과 같습니다.

mysql> INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = 1' at line 1

에러 메시지의 가장 중요한 부분은

... syntax to use near 'WHERE id = 1' ...

여기에는 파서가 예상하지 못한 특정 부분인 WHERE 절이 표시됩니다.

완전히 틀렸습니다.INSERT QUERY에는 WHERE 절이 없고 UPDATE QUERY만 있습니다.ID = 1인 데이터를 추가하려면 쿼리가

UPDATE Users SET weight=160, desiredWeight= 145 WHERE id = 1;

아니요. 이 쿼리에 WHERE 절을 추가할 수 없는 것으로 알고 있습니다.SQL을 잊어버렸을 수도 있습니다.왜 SQL이 필요한지 잘 모르겠습니다.

Insert 문에서 where 조건을 사용하면 안 됩니다.필요한 경우 업데이트 문에 삽입을 사용하여 기존 레코드를 업데이트합니다.

실제로 Insert 스테이트먼트에 where 절이 필요한 이유를 알 수 있을까요?

아마도 내가 더 나은 선택을 제안할 수 있는 이유 때문일지도 몰라.

가장 좋은 방법은 INSERT 대신 REPLACE를 사용하는 것이라고 생각합니다.

사용자로 치환(ID, 중량, 희망)중량) 값(1, 160, 145);

이것도 꼭 읽어주세요

말도 안 돼...문자 그대로라도

INSERT 것을 합니다.new row '라고 하면WHERE.SQL.

따라서 기존 행의 조건으로는 새 행을 추가할 수 없습니다.

다음 중 하나를 선택해야 합니다.

A.를 사용합니다.UPDATEINSERT

B. 를 사용합니다.INSERTWHEREclause 할 필요가 (「 」 「 」 「 」 「 」 「 」 )INSERT ★★★★★★★★★★★★★★★★★」WHERE하나의 문장으로는 INSERT를 통해서만 수행할 수 있습니다.SELECT 절...

INSERT INTO Users( weight, desiredWeight ) 
SELECT FROM Users WHERE id = 1;

그러나 이 방법은 전혀 다른 용도로 사용되며 id를 기본 키로 정의한 경우 삽입이 실패하고, 그렇지 않은 경우 ID = 1인 새 행이 삽입됩니다.

오래된 투고라는 것은 알고 있습니다만, 이 투고가 누군가에게 도움이 되었으면 합니다.제가 바라는 것은 간단한 예입니다.

배경:

같은 사용자가 여러 개의 값을 가진 여러 번 나열되고 새 레코드를 만들고 싶었기 때문에 UPDATE는 내 경우 의미가 없고 WHERE 절을 사용하는 경우와 마찬가지로 특정 사용자를 대상으로 해야 했습니다.

INSERT into MyTable(aUser,aCar)
value(User123,Mini)

이 구성을 사용하면 특정 사용자(user123, 다른 레코드가 있는 사용자)를 대상으로 하기 때문에 where 절이 필요하지 않다고 생각합니다.

출력은 다음과 같습니다.

aUser   aCar
user123 mini
user123 HisOtherCarThatWasThereBefore

post 메서드를 사용하여 mysql insert to statement의 올바른 구문은 다음과 같습니다.

$sql="insert into ttable(username,password) values('$_POST[username]','$_POST[password]')";

insert 스테이트먼트의 where 절을 사용할 수 없을 것 같습니다.

INSERT INTO Users(weight, desiredWeight )
SELECT '$userWeight', '$userDesiredWeight'  
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';

INSERT와 WHERE를 함께 사용할 수 없습니다.UPDATE 절을 사용하여 아래 코드와 같이 특정 필드에 값을 추가할 수 있습니다.

UPDATE Users
SET weight='160',desiredWeight ='145'  
WHERE id =1

이것은, 다음의 코드로 실시할 수 있습니다.

INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition

이메일을 두 번 사용하지 않도록 테이블을 검증하려면 이렇게 해야 한다고 생각합니다.

코드:

INSERT INTO tablename(fullname,email) 

SELECT * FROM (SELECT 'fullnameValue' AS fullname_field,'emailValue' AS email_field) entry WHERE entry.email_field NOT IN (SELECT email FROM tablename);

위의 답변은 모두 일반 MySQL 문을 제공합니다.

PHPMyAdmin의 where 조건을 사용하여 테이블의 기존 행을 갱신하는 경우 다음 권장사항을 제시합니다.

UPDATE `Table_Name` SET `row1`='[value-1]',`row2`='[value-2]',`row3`='[value-3]' WHERE 1

각 행의 " 사이에 임의의 값을 포함할 수 있습니다.반드시 []를 사용하여 값을 나타낼 필요는 없습니다.장소를 변경한 후에는 아무것도 변경하지 마십시오.업데이트할 값을 지정한 후 이동을 클릭하십시오.

예:

UPDATE `Mytable_name` SET `abc`='xyz',`def`='uvw'
 WHERE 1

언급URL : https://stackoverflow.com/questions/485039/mysql-insert-query-doesnt-work-with-where-clause

반응형