我正在編寫一個Android應用程序,並且遇到了一些涉及數據庫的障礙。在Android處理數據庫的方式中,我無法使用通常的'tablename.colname'方法引用結果集中的名稱,因此當數據庫中的任何表包含相同的列名時,這會造成很大的問題。問題更加複雜的是,ViewAdapter用於向用戶顯示數據的任何表(如我的應用程序中)必須包含名爲「_id」的字段作爲自動增量主鍵int。因此,一些表必須具有相同的列名稱。但是,爲了避免這種情況,可以在語句中使用「AS」子句來重命名相關值。但是,我使用了一個相當長的語句,我不知道如何限制JOINed表上返回的列。我所擁有的是這個,由於'tablename.colname'引用,它在android中是完全非法的。我實際上是在增加的表名使表述更加可讀,但我不能使用它們:SQL在JOIN查詢中選擇特定字段
SELECT call._id AS android_call_id,
call.phone,
call.time,
call.duration
call.duration_billed
call.pending
call.call_id
call.job_id
FROM call
LEFT OUTER JOIN phone ON call.phone_number=phone.phone
LEFT OUTER JOIN job ON job._id=call.job_id
WHERE call.pending=1 ORDER BY job._id
,但我需要的,是別的重命名使用「AS」語句job._id的東西,與查詢的第一部分中的'call._id'字段相同。我如何在JOIN中實現這種重命名?
編輯:
迄今爲止取得的進展。我想我已經制定了語法錯誤,但我得到的另一個運行時錯誤「沒有這樣的列‘job._id’,這可能是@湯姆H.評論
編輯2相關:
證明湯姆是對的,我相應的調整,但它不工作:
SELECT call._id AS android_call_id,
call.phone,
call.time,
call.duration,
call.duration_billed,
call.pending,
call.call_id,
call.job_id,
job._id AS android_job_id,
job.job_name,
job.job_number
FROM call
LEFT OUTER JOIN phone ON call.phone_number=phone.phone
LEFT OUTER JOIN job ON job._id=call.job_id
WHERE call.pending=1 ORDER BY job._id
錯誤:
05-24 16:50:37.561: ERROR/Minutemaid - Service(7705): oops: ambiguous column name: call._id: , while compiling: SELECT call._id AS android_call_id,call.phone_number,call.time,call.duration,call.duration_billed,call.pending,call.call_id,call.job_id,job._id AS android_job_id,job.job_name,job.job_number FROM call LEFT OUTER JOIN phone ON call.phone_number=phone.phone LEFT OUTER JOIN call ON call.job_id=job._id WHERE call.pending=1 ORDER BY job._id
列別名的輸出,不是用於連接..你需要在那裏使用真正的列名。 – Fosco 2011-05-24 20:15:57
@Fosco我意識到......我不認爲你理解這個問題...... – moonlightcheese 2011-05-24 20:18:57
你的SELECT子句中沒有任何列出的任務列表。 Android應用程序甚至不應該能夠看到它們。我不清楚究竟是什麼問題。 – 2011-05-24 20:23:50