如何编写sqlite命令来选择不同的记录?

时间:2014-03-22 13:20:01

标签: sqlite

我的数据库中有两个表(t1和t2),它们都有三个字段codedateprice。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的含义是什么?

2 个答案:

答案 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中的组合。