2014-12-08 3 views
-1

가상 테이블을 만들 수 없습니다. 내가 table1에 존재하지 않는 그 값을 알고 그들을 표시 할MySQL에서 목록에서 값을 선택하지 마십시오.

'Succinylcholine','Thiamine','Trandate','Tridol Drip'

: 기본적으로 내가 무엇을, 값의 목록입니다. 이것이 가능한가? 내가 왼쪽 조인을 사용하여 시도하고 테이블과 비교할 수있는 목록과 변수를 만드는 잘못된 결과를 반환합니다.

이 내가 시도했던 것들 중 하나입니다 :

SET @list="'Amiodarone','Ammonia Inhalents','Aspirin'; 

SELECT @list FROM table1 where @list not in (
    SELECT Description 
    FROM table1 
); 
+0

Are 'Description' 칼럼에리스트의 모든 요소 (하위 문자열)가 * 포함되어있는 행이 있는지 확인하려고합니까? 또는, 목록의 각 요소에 대해 행의 Description 요소가 해당 요소를 포함하고 있는지 (또는 포함하고 있는지) 여부를 결정하려고합니까? –

+0

@JohnBollinger, 단순히 데이터베이스에없는 목록의 모든 값을 찾으십시오. 더 간단하게 설명 할 수는 없습니다. – user3704920

+0

"더 간단하게"찾고 싶지 않습니다. "더 정확하게"찾고 있습니다. "데이터베이스에없는"의미를 명확히하는 것이 특히 도움이 될 것입니다. 또한 목록에 단일 문자열 형태로 쿼리를 표시하는 것이 필수적인지 여부를 알아두면 도움이됩니다 (예 : 예) 또는 수용 할 수있는 쿼리 형식이 더 융통성이 있는지 여부 –

답변

0

작동하지 않습니다. 변수의 내용은 모 놀리 식 문자열 (monolithic string)로 처리됩니다. 단 하나의 솔리드 블록으로 3 개의 분리 된 쉼표로 분리 된 값이 아닙니다. 쿼리는/분석으로 실행됩니다 : 당신은 그냥 하위 선택 매우 동일한 테이블에 일을하고 있기 때문에,

SELECT ... WHERE "'Amio.....rin'" IN (x,y,z,...) 
       ^--------------^--- string 

플러스하는 구조의이 종류에 아무 소용이 없다. 당신은 MySQL의에게 find_in_set() 기능을 시도 할 수 :

SELECT @list 
FROM table1 
WHERE FIND_IN_SET(Description, @list) <> '' 
+0

마지막 부분'<> '와 같지 않음 ** 전체 ** 목록을 비교하고 싶습니다. 하나의 단일 값을 찾고 있지 않습니다. – user3704920

+0

@ user3704920, "전체 목록"을 비교 하시겠습니까?질문에서 [list elements, yes?] 값이 어떤 테이블에 존재하지 않는지 알고 싶습니다. –

+0

@JohnBollinger 네, 거기에 값을 입력해야하는 것처럼 위 조항을 이해하지 못합니까? 전체 목록이있는 이유는 목록의 각 값을 수동으로 데이터베이스와 비교할 필요가 없기 때문입니다. – user3704920

1

에만 좁은 예외로를, 당신은 당신의 결과 세트에서 그 데이터를 확보 할 수 있도록 테이블 형태의 데이터가 필요합니다. 이것은 임시 테이블을 만들 수 없다는 가정하에이 문제를 해결하기위한 모든 시도가 실행되는 근본적인 문제입니다. 당신이 의 입력을 제공 할 수 실제로있는 경우 양식이나 형식 (귀하의 코멘트 당), 당신은 서브 쿼리의 형태를 제공 할 수 있습니다

(
    SELECT 'Amiodarone' AS description 
    UNION ALL 
    SELECT 'Ammonia Inhalents' 
    UNION ALL 
    SELECT 'Aspirin' 
) 

(예외의 가장 큰 행사가 그 주 I 주의 : 기본 테이블없이 직접 스칼라를 선택할 수 있습니다. 원하는 경우 명시 적으로 - FROM DUAL을 선택하여 MySQL 및 Oracle에서 명시 할 수 있습니다.

이 경우에는 다음과 같이 작동해야합니다. 너 :

SELECT 
    a.description 
FROM 
    (
    SELECT 'Amiodarone' AS description 
    UNION ALL 
    SELECT 'Ammonia Inhalents' 
    UNION ALL 
    SELECT 'Aspirin' 
) a 
    LEFT JOIN table1 
    ON a.description = table1.description 
WHERE table1.description IS NULL 
관련 문제