2013-07-21 3 views
0

레코드가 2 개의 테이블 중 어떤 테이블에 속해 있는지 확인하고 반환 된 테이블에 따라 변수를 설정해야한다는 요구 사항이 있습니다.MySQL을 사용하여 레코드가 속한 테이블 확인

2 테이블 (tbl_registered_users, tbl_unregistered_users) 있습니다. tbl_registered_users에 존재하는 이메일 주소를 검색하면 검색어가 'tbl_registered_users'를 반환하므로 변수 $ whatTable = ... (예 :)을 설정할 수 있습니다.

적어도 두 개의 쿼리 또는 하나의 테이블에 레코드가 있음을 보장 할 수있는 경우에도이 작업을 수행 할 수 있음을 알고 있지만 잠재적으로 3/4/5/10 테이블과 레코드에 쿼리를 사용하고 싶습니다. 어떤 것에도 존재하지 않을 수도 있습니다.

감사

+1

'is_registered' 플래그가있는 단일 테이블은 어떻습니까? – zerkms

+0

레거시 코드와 나는 하나의 테이블을 가지고 있다고 생각하여 업데이트 할 시점에있다. – puks1978

답변

1

당신은 하위 쿼리와 그에 대한 UNION를 사용할 수 있습니다

SELECT * 
FROM (
    SELECT 'Registered' WhichTable, Email 
    FROM tbl_registered_users 
    UNION 
    SELECT 'UnRegistered', Email 
    FROM tbl_unregistered_users 
) t 
WHERE Email = 'emailaddress' 

더 나은 성능을 얻을 것이다 UNION ALL를 사용하지만이 제거되지 않습니다 중복 (하나의 테이블에서 데이터를 복제 한 경우)

+0

예를 들어 주셔서 감사합니다. 이메일 주소 배열이 있으면이 작업이 가능합니까? – puks1978

+0

@KerePuki - np, 예제를 업데이트 할 수 있습니까? 쉼표로 구분 된 문자열 (예 : 'email1, email2, email3')과 같은 배열입니까? 그렇다면'= '대신에'FIND_IN_SET'을 사용할 수 있습니다. 다음과 같은 것 :'WHERE FIND_IN_SET (이메일, @ EmailList) ' – sgeddes

+0

@KerePuki - 업데이트 된 바이올린 : http://sqlfiddle.com/#!2/000e3/4 – sgeddes

관련 문제