2014-03-04 2 views
0

완전히 이해할 수없는 쿼리가 있습니다. mysql v.5.5로 테스트하고 아무 것도 얻지 못한다. 내가 이해 무엇select 문을 사용하여 삽입

INSERT INTO 
      logs (
       f1, 
       f2, 
       f3, 
       f4, 
       f5, 
       f6 
      ) 
     SELECT 
       'test', 
       'done', 
       'test', 
       'test', 
       'test', 
       'test' 
     FROM 
      logs 
     WHERE 
      NOT EXISTS (
       SELECT * FROM 
         logs 
      WHERE 
       f1 = 'test' and 
       f2 = 'done' and 
       f3 = 'test' and 
       f4 = 'test' and 
       f5 = 'test' and 
       f6 = 'test' 
      ) 
     LIMIT 1 

다른 테이블에서 필드를 선택하고 iserted 수 있다는 것입니다,하지만 필드하지만, 필드 값을 선택하는 이유를 내가 이해하지 못하는 것은 : 여기에 조각입니다. 이전 버전의 MySQL에서이 기능을 사용할 수 있습니까? 또한 .. SQL Server 2008에서 실행되는 적절한 쿼리가 필요합니다. 설명이 있습니까? 감사. 그 값을 해당 행이 테이블에 존재하지 않는 경우

답변

1

이 SQL은 값

f1 = 'test' and 
f2 = 'done' and 
f3 = 'test' and 
f4 = 'test' and 
f5 = 'test' and 
f6 = 'test' 

와 테이블 logs의 행을 삽입합니다. https://dev.mysql.com/doc/refman/5.0/en/insert-select.html, 심지어 MySQL은 4.1 : http://dev.mysql.com/doc/refman/4.1/en/insert-select.html SQL 약

, 미안, 함께 일한 적이있어, 그러나 확실하게 그것은있을 것이다이 사용할 수있는 MySQL의 5.0 버전에 대한

INSERT INTO 
     logs (
      f1, 
      f2, 
      f3, 
      f4, 
      f5, 
      f6 
     ) 
     -- Here we're specifying which value will have every field 
    SELECT 
      'test', 
      'done', 
      'test', 
      'test', 
      'test', 
      'test' 
    FROM 
     logs 
    WHERE 
     -- Here we're looking into the table 'logs' for the row with that values. 
     -- If we match the condition we'll insert into the table 
     NOT EXISTS (
      SELECT * FROM 
        logs 
     WHERE 
      f1 = 'test' and 
      f2 = 'done' and 
      f3 = 'test' and 
      f4 = 'test' and 
      f5 = 'test' and 
      f6 = 'test' 
     ) 
    LIMIT 1 

, 비슷한 문장, 당신은이 SO 질문을 볼 수 있습니다 : Insert into ... values (SELECT ... FROM ...)

+0

아주 멋진 설명. BTW, 난 그냥 선택을 추출하려고 ... (없이) 부분, 그리고 그 결과는 선택 진술의 값이 열 이름으로 취급됩니다 ..이 확인은 무엇입니까? –

+0

select 만 추출하면 아무 것도하지 않습니다. 문자열을 선택하면 문자열이됩니다. 값을 필드로 지정하려면 'SELECT'문자열 'AS f1'을 수행하면됩니다.이 값은'string '값을 가진 f1 필드를 제공합니다. – Chococroc

+0

http : // screencloud보세요. .net/v/4DnE –

관련 문제