2014-09-15 2 views
0

Error: ambiguous column name: msgs.msgcontent1으로 돌아 오는 sqlite에 대해 다음과 같은 SELECT 문이 있지만 열 이름이 모호하지 않습니다! 아무도 내가 여기에서 놓친 것을 알아낼 수 있습니까?모호하지 않은 Sqlite 모호한 열 이름입니다. 테이블 이름이 포함됩니다.

SELECT 
    phone_lookup.normalized_number AS number , 
    contacts.display_name AS name , 
    msgs.msgcontent1 
FROM 
    contacts2.contacts , 
    temp.msgs 
    INNER JOIN contacts2.phone_lookup ON (contacts.name_raw_contact_id = phone_lookup.raw_contact_id) 
    INNER JOIN temp.msgs ON (contacts.phone_lookup.normalized_number = msgs.sender) ; 

다음은 내가 귀찮은 열이있는 테이블을 작성하는 데 사용되는 문입니다 : 나는 그것이 문제와 관련이 생각하지 않지만,

CREATE TEMP TABLE msgs 
AS SELECT 
    PART."_ID" , 
    ADDR."_ID" , 
    DATETIME(SUBSTR(COALESCE(PDU."DATE" , SMS."DATE") , 1 , 10) , 'localtime' , 'unixepoch') AS dt , 
    COALESCE(PDU.READ , SMS.READ) AS read , 
    COALESCE(SMS.ADDRESS , ADDR.ADDRESS) AS sender , 
    COALESCE(SMS.BODY , COALESCE(PART.TEXT , PART."_DATA")) AS msgcontent1 
FROM 
    mmssms.PDU 
    LEFT OUTER JOIN mmssms.SMS ON (PDU."DATE" = SMS."DATE") 
    LEFT OUTER JOIN mmssms.PART ON (PART.MID = PDU."_ID") 
    LEFT OUTER JOIN mmssms.ADDR ON (ADDR.MSG_ID = PDU."_ID") 
WHERE 
    COALESCE(SMS.BODY , COALESCE(PART.TEXT , PART."_DATA")) IS NOT NULL AND ADDR."_ID" IN 
    ( 
     SELECT 
     MIN(ADDR."_ID") 
     FROM 
     ADDR 
     GROUP BY 
     ADDR.MSG_ID 
     ORDER BY 
     ADDR."_ID" 
    ) AND PART."_ID" IN 
    ( 
     SELECT 
     MAX(PART."_ID") 
     FROM 
     mmssms.PART 
     GROUP BY 
     PART.MID 
     ORDER BY 
     PART."_ID" 
    ) 
UNION ALL 
SELECT 
    PART."_ID" , 
    ADDR."_ID" , 
    DATETIME(SUBSTR(COALESCE(PDU."DATE" , SMS."DATE") , 1 , 10) , 'localtime' , 'unixepoch') AS dt , 
    COALESCE(PDU."READ" , SMS."READ") AS read , 
    COALESCE(SMS."ADDRESS" , ADDR."ADDRESS") AS sender , 
    COALESCE(SMS."BODY" , COALESCE(PART."TEXT" , PART."_DATA")) AS msgcontent2 
FROM 
    mmssms.SMS 
    LEFT OUTER JOIN mmssms.PDU ON (PDU."DATE" = SMS."DATE") 
    LEFT OUTER JOIN mmssms.PART ON (PART."MID" = PDU."_ID") 
    LEFT OUTER JOIN mmssms.ADDR ON (ADDR."MSG_ID" = PDU."_ID") 
WHERE 
    COALESCE(SMS."BODY" , COALESCE(PART."TEXT" , PART."_DATA")) IS NOT NULL 
ORDER BY 
    DATETIME(SUBSTR(COALESCE(PDU."DATE" , SMS."DATE") , 1 , 10) , 'localtime' , 'unixepoch') DESC , 
    ADDR."_ID" ASC ; 

마지막을, 나는 sqlite가 시작 다음 프라 그마와 명령을 내가 다에 액세스 할 수 있는지 확인하기 위해 문을 첨부 : 그것은후 좋아에게 temp.msgs 보일

PRAGMA temp_store = MEMORY ; 
ATTACH '/data/data/com.android.providers.contacts/databases/contacts2.db' AS contacts2 ; 
ATTACH '/data/data/com.android.providers.telephony/databases/mmssms.db' AS mmssms ; 

답변

1

을 이미 INNER JOIN 절에 있으므로은 필요하지 않습니다. 그래서이 쿼리가 작동해야합니다

SELECT 
    phone_lookup.normalized_number AS number , 
    contacts.display_name AS name , 
    msgs.msgcontent1 
FROM 
    contacts2.contacts 
    INNER JOIN contacts2.phone_lookup ON (contacts.name_raw_contact_id = phone_lookup.raw_contact_id) 
    INNER JOIN temp.msgs ON (contacts.phone_lookup.normalized_number = msgs.sender) ; 

을 두 곳에서 같은 테이블을 지정 (FROM 및 절을 가입) 다음 각각 별개의 별칭을 사용해야하며 이러한 별칭을 사용하여 열을 참조해야하는 경우.

자세한 정보 : SQLite Query Language: SELECT

+0

효과가 있습니다. 고맙습니다! – HeatherLeigh