我是新手,我尝试在我的数据库上执行此操作
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
答案 0 :(得分:17)
只需指定您要选择的id
,例如
SELECT a.id ....
此外,您的表格似乎没有您稍后在查询中使用的val
列。
答案 1 :(得分:4)
您实际上在查询中使用了两个表,而不是一个,尽管它们都从同一个底层物理表中获取数据。这些表称为a
和b
。在此特定查询中,无论您执行SELECT a.id
还是SELECT b.id
都无关紧要,因为值始终相同。但是想象一下你写了ON a.id = b.id + 1
- 因为 会对SELECT
或a
中的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 字段在不同的表中很可能不明确。这种方法的缺点是您必须枚举查询中的所有必要字段,但在某些情况下这可能特别有用。