我的数据库中有两个表(t1和t2),它们都有三个字段code
,date
和price
。t1有800条记录,t2有790条记录, code
字段是相同的。
从t1中选择不同的代码=从t2中选择不同的代码
我想从t1和t2中选择记录。
假设在t1
code date
x1 d1
x1 d2
x1 d3
在t2:
code date
x1 d4
x1 d2
x1 d5
我想在t1中选择记录。
code date
x1 d1
x1 d3
我想在t2中选择记录。
code date
x1 d4
x1 d5
如何编写sqlite命令?
想想CL,它对我来说很好,
但我很难理解查询。
1.
的含义是什么SELECT 1
FROM t2
WHERE t2.code = t1.code
AND t2.date = t1.date ?
为什么不把它写成
SELECT 1
FROM t1
WHERE t2.code = t1.code
AND t2.date = t1.date ?
2.为什么我不能把它写成
SELECT *
FROM t1
WHERE NOT EXISTS (SELECT 1
FROM t2,t1
WHERE t2.code = t1.code
AND t2.date = t1.date)
查询SELECT 1 FROM t2 WHERE t2.code = t1.code AND t2.date = t1.date将获得两个1。两个1的含义是什么?
答案 0 :(得分:1)
要检查记录是否存在,请使用带有correlated subquery的EXISTS。
这将选择t1
中不存在code
/ date
值组合的所有t2
行:
SELECT *
FROM t1
WHERE NOT EXISTS (SELECT 1
FROM t2
WHERE t2.code = t1.code
AND t2.date = t1.date)
答案 1 :(得分:0)
你也可以试试这个:
SELECT *
FROM t1
WHERE (t1_code || t1_date) not in
(
select (t2_code || t2_date)
from t2 );
我正在做的只是在t1中连接代码和日期,并在t2中连接代码和日期,并获取t1中的组合而不是t2中的组合。