2011-08-01 95 views
0

我的要求是表的清单列表,循环列表需要从映射表&调用表名了android表名时:SQlite的From子句SELECT语句

看到我的查询:

SELECT * FROM SELECT ToTable FROM RDSynchronisationControlHeader 
WHERE FromTable ='RD.TransactionControl' 

当我从查询浏览器运行此查询时,这不工作? 我们不能在from子句中使用select语句吗?

private boolean isTableRecords(String tablename){ 
    DBAdapter dbAdapter = DBAdapter.getDBAdapterInstance(this); 
    boolean recordStatus = false; 
     try { 
      dbAdapter.createDataBase(); 
    } catch (IOException e) { 
      Log.i("*** select ",e.getMessage()); 
    } 
    dbAdapter.openDataBase(); 
    String query = "SELECT * FROM SELECT ToTable FROM RDSynchronisationControlHeader WHERE FromTable ='?';"; 

    String[]d = new String[]{tablename}; 
    ArrayList stringList = dbAdapter.selectRecordsFromDBList(query, d); 


    dbAdapter.close(); 

    ArrayList<Object> wmRouteList = new ArrayList<Object>(); 
    recordStatus = stringList.size() >0 ? true : false; 
    return recordStatus; 
} 

请帮助我..

在此先感谢

+0

明确的问题带来更快的答案。所以你需要一个查询,将从列表中选择名称的列表中选择? – Rasel

回答

0

不是一个大的SQLite的人,但在我工作中,当你使用一个子选择的任何环境中,你会希望子查询是在括号中,如:

SELECT * FROM 
    (
     SELECT ToTable 
     FROM RDSynchronisationControlHeader 
     WHERE FromTable ='RD.TransactionControl' 
    ) 
+0

我也尝试过这样。 '选择ToTable FROM RDSynchronisationControlHeader WHERE FromTable = 'RD.TransactionControl''这回表名,samething当我这样调用'SELECT * FROM ( 选择ToTable FROM RDSynchronisationControlHeader WHERE FromTable =' RD.TransactionControl” ) '这个也返回表名,这意味着返回子查询结果.. – Piraba

+0

我明白了 - 我一开始并不理解你的问题。我认为你的子查询会返回一个表名,并且你想从该表中做一个'SELECT *'。无论你如何完成这个任务,这将会是两个疑问 - 不能只用一个来完成。你将不得不运行你的第一个查询来获取表名,然后建立你的SQL语句来运行真正的查询。即使在存储了特效的环境中,也可以在proc中动态构建语句,但仍会触发两个查询。但是既然你在SQLite中,反正它是没有意义的。 –

+0

你的假设是正确的.subquery返回表名,我需要从该表做一个SELECT *。有一个查询我不能这样做... – Piraba

0

这应该是尽可能在

0123表格查询

这可能会也可能不会,因为SQL不是我的特长。但是,引用函数能够将文本转换为表格标识符,这是我相信您需要的。

+0

我想在一个查询中执行,这就是为什么我试图这样 – Piraba

+0

此外,'$ stored_value','$ final_value'变量是PHP风格。确保你改变了。我正在研究一个大的PHP,Actionscript,SQL项目,而PHP风格是潜意识的。 – Josh

0

SELECT语句的SQLite语法图(www.sqlite.org)包含表内容和表名之间的混淆。

假设有一个叫XXXX在数据库中的表:

SELECT * FROM (SELECT tbl_name FROM sqlite_master WHERE tbl_name = 'xxxx' AND Type='table'); 

返回一个完全不同的结果

SELECT * FROM 'xxxx' 

在第一条语句的表或-子查询的东西当成一个表的内容,在第二个语句中,表或子查询是表名。

所以你必须做一些像乔希的回答。运行SQLite两次,使用第一次调用的结果构造第二个SQL语句。