Sqlite:含糊不清的列名

时间:2014-03-25 11:29:50

标签: sqlite ambiguous

我是新手,我尝试在我的数据库上执行此操作

  

SELECT id FROM import INNER JOIN import b ON a.id-1 = b.id AND b.val = 0 WHERE a.val = -1

Pb:不明确的列名:id

我的表:

CREATE TABLE "import" (
    "id" INTEGER PRIMARY KEY  NOT NULL ,
    "id_analyse" integer, 
    "cross" varchar,
    "date" datetime,
    "close" double,
    "low" double,
    "high" double,
    "T" integer DEFAULT (NULL) ,
    "B" INTEGER
 )

我无法理解因为我读了

  

当使用多个表时(例如在JOIN中),可能有两列具有相同的名称。

我只使用一张桌子!

有人可以帮助我吗?

的Stephane

5 个答案:

答案 0 :(得分:17)

只需指定您要选择的id,例如

SELECT a.id ....

此外,您的表格似乎没有您稍后在查询中使用的val列。

答案 1 :(得分:4)

您实际上在查询中使用了两个表,而不是一个,尽管它们都从同一个底层物理表中获取数据。这些表称为ab。在此特定查询中,无论您执行SELECT a.id还是SELECT b.id都无关紧要,因为值始终相同。但是想象一下你写了ON a.id = b.id + 1 - 因为 会对SELECTa中的id列b产生影响。< / p>

答案 2 :(得分:1)

您可能也会因WHERE子句中的含糊不清而收到此错误。所以,例如,而不是......

WHERE _id = 4

......你可能需要......

WHERE my_table_name._id = 4

答案 3 :(得分:0)

我有一个案例,在sqlite中发生错误查询:

const path = require('path');
const pdf = require('pdf-poppler');

let file = 'C:\\tmp\\convertme.pdf'

let opts = {
    format: 'jpeg',
    out_dir: path.dirname(file),
    out_prefix: path.baseName(file, path.extname(file)),
    page: null
}

pdf.convert(file, opts)
    .then(res => {
        console.log('Successfully converted');
    })
    .catch(error => {
        console.error(error);
    });

问题是表{A和B}中都存在select * from A, B where A.col=B.col 。 通过专门选择表B中的所有列来修复此问题:col

答案 4 :(得分:0)

另一种选择是在查询中使用 package com.example.group; import android.app.Activity; import android.util.Log; import android.widget.TextView; import io.socket.client.IO; import io.socket.client.Socket; public class Conexao { private static Conexao instance; public String host = "http://192.168.0.117:8090"; Socket socket; public synchronized static Conexao getInstance() { if (instance == null) { try { instance = new Conexao(); }catch (Exception e){ } } return instance; } public Conexao() throws URISyntaxException { socket = IO.socket(host); } public void open(){ socket.connect(); } public void close(){ socket.disconnect(); } } 关键字声明字段别名。

AS

这在您使用 SELECT import.id AS id, id_analyse, any_other_field FROM import WHERE ... 时特​​别有用,其中 id 字段在不同的表中很可能不明确。这种方法的缺点是您必须枚举查询中的所有必要字段,但在某些情况下这可能特别有用。