我正在编写一个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