2013-03-18 2 views
1

나는 임의의 값을 테이블에 0에서 9999 사이의 임의의 값을 INSERT하는 쿼리를 작성하려고하는데이 임의의 값은 아직 거기에 존재하지 않습니다. 그러나 내가 쓴 것은 아무것도 없습니다. WHERE 절이 INSERT와 함께 작동하지 않으며 SQL Server가 IF NOT EXISTS 쿼리를 실행하지 못하는 것 같습니다. 잘못된 것인가? 어떻게해야합니까? 내 문제에 대한 해결책이 있습니까? IF NOT EXISTS 문이 작동하지 않는 이유는 무엇입니까?

SET @rand = ROUND(RAND() * 9999); 
IF NOT EXISTS (SELECT `num` FROM `nums` WHERE `num` = @rand) 
    INSERT INTO `nums` (`num`) VALUES (@rand); 
+1

의 MySQL 또는 Oracle을? 그들은 완전히 다릅니다. – Mat

+2

IF 문은 TSQL 및 PL/SQL과 같은 경우에만 작동합니다. 방금 쿼리를 실행하는 경우에는 작동하지 않습니다. 그 논리를 실행 코드에 넣어야합니다. – rbedger

+0

어떻게하면됩니까? 현재 버전의 WampServer 및 XAMPP와 함께 사용되는 MySQL 버전을 사용하고 있습니다. – user2182300

답변

0

은 다음과 같이 저장 프로 시저를 사용하여보십시오 (내가 MySQL을 사용하고 있습니다) :

CREATE PROCEDURE my_sp() 
BEGIN 
SET @rand = ROUND(RAND() * 9999); 
IF NOT EXISTS (SELECT `num` FROM `nums` WHERE `num` = @rand) THEN 
    INSERT INTO `nums` (`num`) VALUES (@rand); 
END IF; 
END 
0

사용하여 문을 IF 저장 프로 시저와 같은 코드 블록 내부에 속해있다. mysql 프롬프트에서 실행할 수는 없다. 이미있는 경우

당신은 당신이 또한 insert ignore으로

 
mysql> create table nums(num int, unique key(num)); 
Query OK, 0 rows affected (0.05 sec) 

mysql> insert ignore into nums >select round(rand()*9999);> 
Query OK, 1 row affected (0.01 >sec)> 
Records: 1 Duplicates: 0 Warn>ings>: 0> 

mysql> insert ignore into nums select round(rand()*9999); 
Query OK, 1 row affected (0.00 sec) 
Records: 1 Duplicates: 0 Warnings: 0 

mysql> insert ignore into nums select round(rand()*9999); 
Query OK, 1 row affected (0.00 sec) 
Records: 1 Duplicates: 0 Warnings: 0 

mysql> insert ignore into nums select round(rand()*9999); 
Query OK, 1 row affected (0.00 sec) 
Records: 1 Duplicates: 0 Warnings: 0 

mysql> select * from nums; 
+------+ 
| num | 
+------+ 
| 5268 | 
| 9075 | 
| 9114 | 
| 9768 | 
+------+ 
4 rows in set (0.00 sec) 

mysql> 

하여 작업을 수행 할 수 있습니다 전에이 아니었다 임의의 값을 삽입 할 경우

, 그것은 행을 삽입하지 않습니다.

1

현재처럼 작업을 수행 할 수 있습니다 MySQL: Insert record if not exists in table

INSERT INTO `nums` (`num`) 
SELECT * 
FROM 
    (SELECT @rand) AS q 
WHERE NOT EXISTS 
    (SELECT `num` 
    FROM `nums` 
    WHERE `num` = @rand); 
+0

갑자기 작동합니다. 고맙습니다! – user2182300

관련 문제