【问题标题】:SQlite From clause SELECT statementSQLite From 子句 SELECT 语句
【发布时间】:2011-08-01 04:49:43
【问题描述】:

我的要求是列表中的表列表,循环列表时需要从映射表中获取android表名并调用该表名:

查看我的查询:

 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;
}

请帮帮我..

提前致谢

【问题讨论】:

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

标签: android sqlite


【解决方案1】:

不是 SQLite 大佬,但在我工作过的任何环境中,当您使用子选择时,您会希望子查询放在括号中,例如:

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

【讨论】:

  • 我也试过这样。 SELECT ToTable FROM RDSynchronisationControlHeader WHERE FromTable ='RD.TransactionControl'这个返回表名,和我这样调用的时候一样SELECT * FROM ( SELECT ToTable FROM RDSynchronisationControlHeader WHERE FromTable ='RD.TransactionControl' )这个也返回表名,也就是说返回子查询结果..
  • 我明白了 - 一开始我不明白你的问题。我认为您的子查询会返回一个表名,并且您想从该表中执行SELECT *。无论您如何完成此操作,这将是两个查询 - 不能仅在一个查询中完成。您必须运行您的第一个查询来获取表名,然后构建您的 SQL 语句来运行真正的查询。即使在具有存储过程的环境中,您也可以在过程中动态构建语句,但它仍然会触发两个查询。但既然你在 SQLite 中,无论如何它都没有实际意义。
  • 您的假设是正确的。子查询返回表名,我需要从该表中执行 SELECT *。只有一个查询我做不到...
【解决方案2】:

这应该可以作为

形式的查询
$stored_value = SELECT ToTable FROM RDSynchronisationControlHeader WHERE FromTable = 'RD.TransactionControl';

$final_value = SELECT * FROM quote($stored_value);

这可能会或可能不会按原样工作,SQL 不是我的强项。但是,quote 函数能够将文本转换为表格标识符,我认为这是您需要的。

【讨论】:

  • 我想在一个查询中执行,这就是我这样尝试的原因
  • 另外,$stored_value$final_value 变量是 PHP 风格的。确保你改变它。我在做一个大的 PHP、Actionscript、SQL 项目,PHP 风格是潜意识的。
【解决方案3】:

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

假设您的数据库中有一个名为 xxxx 的表:

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

返回与

完全不同的结果
SELECT * FROM 'xxxx'

在第一个语句中,表或子查询被视为表的内容,在第二个语句中,表或子查询是表的名称。

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

【讨论】:

    猜你喜欢
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2012-08-28
    • 1970-01-01
    • 2016-03-25
    相关资源
    最近更新 更多