如何查询表A中的某字段的值在表B中不存在?

1、测试表创建,插入数据:

create table a
(id int,
name varchar2(10));
 
create table b
(id int);
 
insert into a values (1,'a');
insert into a values (2,'b');
insert into a values (3,'c');
insert into a values (4,'d');
insert into a values (5,'e');
 
insert into b values (1);
insert into b values (3);

2、查询b表中存在的id不出现在a表中的内容,可用语句:

select * from a where id not in (select id from b);

3、结果:

demo

查询泊位表中地磁编号在地磁表中没有的

SELECT P.GEIMAGNETIC_ID FROM PARK P  WHERE P.GEIMAGNETIC_ID NOT IN (SELECT EQUIP_ID FROM GEIMAGNETIC G)

select equip_id,PARKLOTS,PARK_ID from GEIMAGNETIC  where equip_id not in (select GEIMAGNETIC_ID  from park p);

 

### 回答1: SQL 拉链的实现通常是通过在两个创建关联键来实现的。以下是一个简单的代码示例: ``` CREATE TABLE A ( ID INT PRIMARY KEY, NAME VARCHAR(255), DATE_FROM DATE, DATE_TO DATE ); CREATE TABLE B ( ID INT PRIMARY KEY, NAME VARCHAR(255), DATE_FROM DATE, DATE_TO DATE, FOREIGN KEY (ID) REFERENCES A(ID) ); INSERT INTO A (ID, NAME, DATE_FROM, DATE_TO) VALUES (1, 'John Doe', '2020-01-01', '2021-12-31'); INSERT INTO B (ID, NAME, DATE_FROM, DATE_TO) VALUES (1, 'John Doe', '2022-01-01', '2023-12-31'); SELECT * FROM A LEFT JOIN B ON A.ID = B.ID WHERE A.DATE_FROM <= '2022-06-01' AND A.DATE_TO >= '2022-06-01'; ``` 在这个代码示例,我们创建了两个 A 和 B,并在 B 创建了一个外键,该外键关联到 A 的 ID 字段。然后,我们在两个插入了数据。最后,我们使用 LEFT JOIN 操作来关联两个,并使用 WHERE 子句筛选满足条件的数据。 ### 回答2: 拉链(ZIP)是一种用于处理两个之间的关系的SQL技术,它将两个按照某个列的对应关系进行连接,并返回一个包含两个所有字段的结果集。下面是一个具体实现的示例代码: A: ```sql CREATE TABLE tableA ( id INTEGER PRIMARY KEY, name VARCHAR(100), date_created DATE ); INSERT INTO tableA (id, name, date_created) VALUES (1, 'John', '2021-01-01'), (2, 'Mary', '2021-02-01'), (3, 'Tom', '2021-03-01'); ``` B: ```sql CREATE TABLE tableB ( id INTEGER PRIMARY KEY, address VARCHAR(100), date_updated DATE ); INSERT INTO tableB (id, address, date_updated) VALUES (1, '123 Main St', '2021-01-10'), (2, '456 Oak Ave', '2021-02-15'); ``` 拉链查询: ```sql SELECT COALESCE(a.id, b.id) AS id, a.name, b.address, COALESCE(a.date_created, b.date_updated) AS date FROM tableA a FULL JOIN tableB b ON a.id = b.id; ``` 以上代码,我们使用了COALESCE函数将两个的相同字段对应的进行合并,如果某个的记录不存在,则使用另一个对应字段。这样可以确保拉链查询结果能包含两个的所有字段,并按照某一列进行连接。 执行以上查询的结果如下: ``` id | name | address | date ---+------+-------------+------------ 1 | John | 123 Main St | 2021-01-01 2 | Mary | 456 Oak Ave | 2021-02-01 3 | Tom | | 2021-03-01 ``` 可以看到,查询结果集包含了A和B的所有记录,并根据id列的对应关系进行了连接。对于某个没有对应记录的情况,我们使用了NULL进行填充。 ### 回答3: 拉链是一种在SQL处理历史数据变化的常见技术。它通过在添加有效期列和版本号列来跟踪数据的变化,以便在查询时可以准确地获取特定时间段的数据。 下面是一个用于实现拉链的示例代码: ``` -- 创建拉链 CREATE TABLE employees ( id INT, name VARCHAR(50), department VARCHAR(50), start_date DATE, end_date DATE, version INT, PRIMARY KEY (id, version) ); -- 添加新数据 INSERT INTO employees(id, name, department, start_date, end_date, version) VALUES(1, 'John', 'IT', '2022-01-01', NULL, 1); -- 更新现有数据 UPDATE employees SET end_date = '2022-03-31' WHERE id = 1 AND version = 1; -- 添加新版本 INSERT INTO employees(id, name, department, start_date, end_date, version) VALUES(1, 'John', 'Marketing', '2022-04-01', NULL, 2); -- 查询特定时间段的数据 SELECT id, name, department, start_date, end_date FROM employees WHERE id = 1 AND start_date <= '2022-02-28' AND (end_date >= '2022-02-28' OR end_date IS NULL) ORDER BY start_date DESC, version DESC; ``` 在上面的例子,我们创建一个名为"employees"的来存储员工信息。包含了id、name、department、start_date、end_date和version列。其,id和version列作为复合主键,用于唯一标识每个数据项的历史版本。 我们可以通过向插入新数据、更新现有数据或添加新的版本来管理历史数据的变化。当需要查询某个特定时间段的数据时,可以使用WHERE子句来过滤出有效期包含目标时间的数据,并按照起始日期和版本号进行降序排序,以获取最新版本的数据。 请注意,拉链的实现方式可能会因具体业务需求和数据库系统的差异而有所不同。上述代码仅提供了一种基本的实现方式,并不是通用的解决方案。在实际应用,可能需要根据具体需求进行一些调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值