2017-08-11 12 views
1

私はデシベルで検索したいのですが、エラーは、あいまいな列名の参加:ID

ambiguous column name: id (code 1): , while compiling: SELECT placa, modelo, fabricante, cor FROM carros INNER JOIN carroCliente ON id = carro WHERE cliente = ?

が現れ、私が間違って何をやっていますか?私は一日中検索してきましたが、ここで何も見つかりませんでした。

私の方法:

public void buscarDados(){ 
     cursor = getDatabase().rawQuery("SELECT " + DatabaseHelper.Carros.PLACA + ", " + DatabaseHelper.Carros.MODELO + ", " 
       + DatabaseHelper.Carros.FABRICANTE + ", " + DatabaseHelper.Carros.COR + " FROM " + DatabaseHelper.Carros.TABELA_CARROS 
       + " INNER JOIN " + DatabaseHelper.CarroCliente.TABELA_CARROCLIENTE + 
       " ON " + DatabaseHelper.Carros.ID + " = " + DatabaseHelper.CarroCliente.ID_CARRO 
       + " WHERE " + DatabaseHelper.CarroCliente.ID_CLIENTE + " = ?", new String[] {Integer.toString(buscarIdCliente())}); 

     if(cursor!=null){ 
      cursor.moveToFirst(); 
     } 
    } 
+0

両方のテーブルの参照を使用 – akhilesh0707

+0

両方のテーブルにidカラムがあります。あいまいなカラム名:id(code 1): 'エラー – akhilesh0707

+0

ですが、私は使用していますか? –

答えて

2

使用リファレンス、両方のテーブルには、以下のようgicenあなたは構文を使用する必要があいまいなID列column name: id (code 1)エラー

public void buscarDados(){ 
     cursor = getDatabase().rawQuery("SELECT A." + DatabaseHelper.Carros.PLACA + ", A." + DatabaseHelper.Carros.MODELO + ", A." 
       + DatabaseHelper.Carros.FABRICANTE + ", A." + DatabaseHelper.Carros.COR + " FROM " + DatabaseHelper.Carros.TABELA_CARROS 
       + " as A INNER JOIN " + DatabaseHelper.CarroCliente.TABELA_CARROCLIENTE + 
       " as B ON A." + DatabaseHelper.Carros.ID + " = B." + DatabaseHelper.CarroCliente.ID_CARRO 
       + " WHERE B." + DatabaseHelper.CarroCliente.ID_CLIENTE + " = ?", new String[] {Integer.toString(buscarIdCliente())}); 

     if(cursor!=null){ 
      cursor.moveToFirst(); 
     } 
    } 
+0

@RafaelMartins @RafaelMartinsもしうまくいけば、その隣のチェックマークを使って答えを受け入れてください – akhilesh0707

+0

「コードのみ」の回答は避けてください。無料でコードを提供するのは、StackOverflowのポイントではありませんが、質問に回答し、理解を助けるために問題を説明します。 – Yunnosch

+0

@Yunnosch質問欄に問題を説明しています – akhilesh0707

2

@Akhileshが彼のコメントで述べたように、あなたのエラーはおそらく定義されid列を持つ両方のテーブルに発生しています。あなたは、各列の範囲を限定するために、明示的な別名を使用することによってこの問題を回避することができます

SELECT 
    t1.placa, 
    t1.modelo, 
    t1.fabricante, 
    t1.cor 
FROM carros t1    -- explicitly specify which 'id' column you are referring to 
INNER JOIN carroCliente t2 
    ON t1.id = t2.carro 
WHERE t2.cliente = ? 

それはあなたが別名を使用する方法を示しますので、他の回答は、Javaコードを与えたが、私は生のクエリは、ここで実際より適切だと思いますあなたの問題を解決する。実際には、クエリではエイリアスを使用することをお勧めします。なぜなら、クエリの読みやすさと読みやすさが低下するからです。テーブルの両方のための

+1

クエリでエイリアスを使用するのは良い方法です – akhilesh0707

1

を持っています。

SELECT column_name(s) 
FROM table1 
INNER JOIN table2 ON table1.column_name = table2.column_name; 

例では、

public void buscarDados(){ 
     cursor = getDatabase().rawQuery(
     "SELECT DatabaseHelper.Carros.PLACA, DatabaseHelper.Carros.MODELO, " 
       + "DatabaseHelper.Carros.FABRICANTE , DatabaseHelper.Carros.COR FROM DatabaseHelper.Carros.TABELA_CARROS " 
       + " INNER JOIN DatabaseHelper.CarroCliente.TABELA_CARROCLIENTE ON " 
     + " DatabaseHelper.Carros.ID = '" + DatabaseHelper.CarroCliente.ID_CARRO + "' " 
       + " WHERE DatabaseHelper.CarroCliente.ID_CLIENTE = '", new String[] {Integer.toString(buscarIdCliente())} + "'"); 
     if(cursor!=null){ 
      cursor.moveToFirst(); 
     } 
    } 
1

SELECT st.id FROM student st INNER JOIN attendance at ON at.id = st.id; 

のように各テーブルにこのような何かを名前を付けてみてください。したがって、どのテーブルのIDにアクセスしようとしているのかを確認できます。 混乱した場合は、まずクエリとDBMSツールを準備してみてください。そのクエリのコードを書きます。

関連する問題