2017-08-11 105 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列'ambiguous列名:id(代碼1):'錯誤 – akhilesh0707

+0

但我使用,或不? –

回答

2

這兩個表用途型號,兩個表具有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如果它的工作請接受一個答案使用旁邊的複選標記 – 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

您必須使用的語法如下gicen;

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工具,而不是爲該查詢編寫代碼。