2011-08-01 6 views
0

Mon exigence est la liste du tableau dans la liste, lors de la boucle de la nécessité de la liste pour obtenir le nom de la table android de table de correspondance & appel que le nom de la table:SQLite clause From instruction SELECT

voir ma requête:

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

Lorsque j'exécute cette requête à partir du navigateur de requêtes, cela ne fonctionne pas? Impossible d'utiliser l'instruction select dans la clause from?

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

S'il vous plaît aidez-moi ..

Merci à l'avance

+0

Effacer la question apporte une réponse plus rapide. Vous avez besoin d'une requête qui va sélectionner dans une table ce nom est dans la liste? – Rasel

Répondre

0

Pas un grand gars SQLite, mais dans un environnement que j'ai travaillé, lorsque vous utilisez un sous-sélection, vous aurez veulent la sous-requête soit entre parenthèses, comme:

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

J'ai essayé comme ça aussi. 'SELECT Totable DE RDSynchronisationControlHeader OU FromTable = 'RD.TransactionControl'' ce nom de la table de retour, samething quand j'ai appelé comme ceci' SELECT * FROM ( SELECT Totable DE RDSynchronisationControlHeader OU FromTable =' RD.TransactionControl » ) 'celui-ci retourne aussi le nom de la table, ce qui signifie que le résultat de la sous-requête est retourné. – Piraba

+0

Je comprends - Je n'ai pas compris votre question au début. Je pense que votre sous-requête vous renvoie un nom de table, et vous voulez faire un 'SELECT *' depuis cette table. Peu importe comment vous accomplissez cela, il y aura deux requêtes - ne peut pas le faire en un seul. Vous devrez exécuter votre première requête pour obtenir le nom de la table, puis générer votre instruction SQL pour exécuter la requête réelle. Même dans un environnement avec procs stocké, vous pouvez construire dynamiquement l'instruction dans un proc, mais il serait encore lancer deux requêtes. Mais puisque vous êtes dans SQLite, c'est discutable de toute façon. –

+0

votre hypothèse est correcte .sququery renvoie le nom de la table, et je dois faire un SELECT * à partir de cette table.Avec une requête je ne pouvais pas le faire ... – Piraba

0

Cela devrait être possible comme une requête sous la forme de

$stored_value = SELECT ToTable FROM RDSynchronisationControlHeader WHERE FromTable = 'RD.TransactionControl'; 

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

Cela peut fonctionner ou ne pas fonctionner tel quel, SQL n'est pas mon point fort. Cependant, la fonction de citation est capable de transformer le texte en identifiant de table, ce dont je crois que vous avez besoin.

+0

Je veux exécuter dans une requête, c'est pourquoi j'ai essayé comme ça – Piraba

+0

En outre, les variables '$ stored_value',' $ final_value' sont de style PHP. Assurez-vous de changer cela. Je travaille sur un gros projet PHP, Actionscript, SQL, et le style PHP était subconscient. – Josh

0

Les diagrammes de syntaxe de SQLite (www.sqlite.org) pour l'instruction SELECT contiennent une confusion entre le contenu d'une table et le nom d'une table.

Supposons qu'il ya une table appelée xxxx dans votre base de données:

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

renvoie un résultat tout à fait différent de celui

SELECT * FROM 'xxxx' 

Dans la première déclaration de la table ou sous-requêtes est quelque chose traités comme ceux d'un tableau contenu, dans la deuxième instruction la table-ou-sous-requête est le nom d'une table.

Alors vous devez faire quelque chose comme la réponse de Josh. Exécutez SQLite deux fois, en utilisant le résultat du premier appel pour construire la deuxième instruction SQL.