Sqlite

SQL 初學者,WHERE 語法錯誤

  • November 27, 2019

對不起,我沒發現問題。有人可以幫我嗎?

我有兩張桌子:

CREATE TABLE "USERS" (
 "id"  INTEGER PRIMARY KEY AUTOINCREMENT,
 "deviceaddress"   TEXT NOT NULL UNIQUE,
 "devicename"  TEXT,
 "username"    TEXT
)

CREATE TABLE "MESSAGES" (
 "id"  INTEGER PRIMARY KEY AUTOINCREMENT,
 "from"    INTEGER NOT NULL,
 "to"  INTEGER NOT NULL,
 "body"    TEXT NOT NULL,
 "time"    TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 FOREIGN KEY("to") REFERENCES "USERS"("id"),
 FOREIGN KEY("from") REFERENCES "USERS"("id")
)

現在我想要所有帶有 to = 1 的消息:

SELECT * FROM MESSAGES WHERE to  = 1;

我在“to”附近得到一個語法錯誤。為什麼???

問候菲利普

你有兩個問題相互疊加。首先,您使用保留字tofrom(以及time)作為表格列,這通常是一個壞主意。您已通過引用有問題的標識符解決了該問題:

 "from"    INTEGER NOT NULL,
 "to"  INTEGER NOT NULL,

現在您忘記了從那裡開始您必須始終引用這些標識符。換句話說,要解決您的第二個問題,您的查詢應該是

SELECT * FROM MESSAGES WHERE "to"  = 1

但是,您確實應該通過不使用保留字作為標識符的一種解決方案來解決這兩個問題:

CREATE TABLE MESSAGES (
 id  INTEGER PRIMARY KEY AUTOINCREMENT,
 from_id    INTEGER NOT NULL,
 to_id      INTEGER NOT NULL,
...

這樣你就永遠不需要記住引用它們。

引用自:https://dba.stackexchange.com/questions/254279