我有兩個文件,每列有三列。來自兩個表格的三列值之間的差異
data1.txt
:https://pastebin.com/ezVr6KPi
# P (Gpa) G/F. unit (a.u.) T (K)
-4.4119598462100 -941.5590019525371 10.0000000000000
-4.4115664473800 -941.5589977004460 30.1000000000000
-4.4084485632200 -941.5589688036446 50.2000000000000
-4.3989188608700 -941.5588816009147 70.3000000000000
...
data2.txt
:https://pastebin.com/veqBi8Er
# P (Gpa) G/F. unit (a.u.) T (K)
7.5789845745700 -941.3858364185293 10.0000000000000
7.5936983738200 -941.3856461092793 30.1000000000000
7.6147899594200 -941.3853929461748 50.2000000000000
7.6413267974900 -941.3851062350891 70.3000000000000
...
我已經在tables.sql
腳本創建2個表,並命名爲列:
.headers on
CREATE TABLE C_I("P1" TEXT, "G1" TEXT, "T1" TEXT);
CREATE TABLE C_II("P2" TEXT, "G2" TEXT, "T2" TEXT);
我導入數據:
.separator " "
.import './data1.txt' C_I
.import './data2.txt' C_II
然後我從文件中刪除原始標題,只是指更好地上面給出的列名:G1
T1
select T1 from C_I LIMIT 3;
select P1 from C_I LIMIT 3;
select G1 from C_I LIMIT 3;
DELETE FROM C_I WHERE T1 == '(Gpa)';
DELETE FROM C_I WHERE P1 == '#';
DELETE FROM C_I WHERE G1 == 'P';
DELETE FROM C_II WHERE T2 == '(Gpa)';
DELETE FROM C_II WHERE P2 == '#';
DELETE FROM C_II WHERE G2 == 'P';
select * from C_I LIMIT 3;
select * from C_II LIMIT 3;
我想獲得的P1
值,,, P2
,G2
,T2
,其中:
P1 = P2
(內的閾值)AND
T1 = T2
(在閾值內)AND
G1 = G2
(在閾值內)。
爲此,我做的事:
更新:
選項1:
SELECT * FROM C_I l1, C_II l2
WHERE
ABS(l1.P1-l2.P2) < 0.005
AND
ABS(l1.T1-l2.T2) < 20.0
AND
ABS(l1.G1-l2.G2) < 0.005
這將打印以下錯誤:
Error: incomplete SQL: SELECT * FROM C_I l1, C_II l2
WHERE
ABS(l1.P1-l2.P2) < 0.005
AND
ABS(l1.T1-l2.T2) < 20.0
AND
ABS(l1.G1-l2.G2) < 0.005
選項2:添加;
SELECT * FROM C_I l1, C_II l2;
WHERE
ABS(l1.P1-l2.P2) < 0.005
AND
ABS(l1.T1-l2.T2) < 20.0
AND
ABS(l1.G1-l2.G2) < 0.005
在這種情況下,整個的兩個表顯示通過終端, ,顯然此代碼已沒有作用。即使我在這三條語句中將閾值設置爲0.0
,也會發生相同的情況(如果閾值爲0.0
,則不會產生輸出)。
OPTION 3:作爲@Myonara建議,增加;
這裏:
SELECT P, G, T FROM C_I l1 , C_II l2
WHERE
ABS(l1.P1-l2.P2) < 0.005;
AND
ABS(l1.T1-l2.T2) < 20.0
AND
ABS(l1.G-l2.G2) < 0.005
產生這個錯誤:
Error: incomplete SQL: AND
ABS(l1.T1-l2.T2) < 20.0
AND
ABS(l1.G1-l2.G2) < 0.005
因此,這是我無法理解的是不工作
我希望你能幫助我。
完整的腳本:tables.sql
:
我運行它爲:sqlite3 < tables.sql
:
.headers on
CREATE TABLE C_I("P1" TEXT, "G1" TEXT, "T1" TEXT);
CREATE TABLE C_II("P2" TEXT, "G2" TEXT, "T2" TEXT);
.separator " "
.import './data1.txt' C_I
.import './data2.txt' C_II
select T1 from C_I LIMIT 3;
select P1 from C_I LIMIT 3;
select G1 from C_I LIMIT 3;
DELETE FROM C_I WHERE T1 == '(Gpa)';
DELETE FROM C_I WHERE P1 == '#';
DELETE FROM C_I WHERE G1 == 'P';
DELETE FROM C_II WHERE T2 == '(Gpa)';
DELETE FROM C_II WHERE P2 == '#';
DELETE FROM C_II WHERE G2 == 'P';
select * from C_I LIMIT 3;
select * from C_II LIMIT 3;
SELECT * FROM C_I l1, C_II l2;
WHERE
ABS(l1.P1-l2.P2) < 0.005
AND
ABS(l1.T1-l2.T2) < 20.0
AND
ABS(l1.G1-l2.G2) < 0.005
您可能需要在最後一個查詢分號 – Ali
@Ali是的,我在最後一個查詢中添加了';',結果是整個2個表都通過終端出現。即使我在三種情況下將容差設置爲'0.0',它也會發生相同的情況 - 請參見更新 –
爲什麼要在此查詢中輸入';'SELECT * FROM C_I l1,C_II l2;',然後繼續執行WHERE '子句?他們是一個查詢嗎? – Ikrom