У меня есть следующий оператор SELECT для sqlite, который возвращается с Error: ambiguous column name: msgs.msgcontent1
, однако это имя столбца не двусмысленно! Может ли кто-нибудь помочь мне понять, что мне здесь не хватает?
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 ) ;
Следующий оператор is я использовал для создания таблицы, содержащей проблемный столбец:
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 со следующей прагмы и операторов присоединения, чтобы убедиться, что у меня есть доступ ко всему:
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 ;