oracle查询a表有的数据,但是b表没有的sql
时间: 2024-03-20 21:41:15 浏览: 18
可以使用 NOT EXISTS 或者 LEFT JOIN...WHERE IS NULL 两种方式查询a表有的数据但是b表没有的数据。
使用 NOT EXISTS 的 SQL 如下:
```
SELECT * FROM a WHERE NOT EXISTS (SELECT * FROM b WHERE a.id = b.id);
```
使用 LEFT JOIN...WHERE IS NULL 的 SQL 如下:
```
SELECT a.* FROM a LEFT JOIN b ON a.id = b.id WHERE b.id IS NULL;
```
这两种方式都可以得到 a 表中有的数据,但是 b 表中没有的数据。
相关问题
oracle基于a表创建一个空的b表
可以使用以下SQL语句在Oracle中基于表A创建一个空的表B:
```
CREATE TABLE B AS SELECT * FROM A WHERE 1 = 0;
```
这将创建一个名为B的新表,该表与表A具有相同的列和数据类型,但不包含任何数据。通过将“WHERE 1 = 0”添加到SELECT语句中,可以确保不会从表A中选择任何数据。
ORACLE 触发器实现A表更新时自动从B表获取数据插入C表
可以使用 ORACLE 触发器实现 A 表更新时自动从 B 表获取数据插入 C 表的操作。具体实现步骤如下:
1. 创建触发器
```sql
CREATE OR REPLACE TRIGGER trigger_name
AFTER UPDATE OF column_name ON A_table
FOR EACH ROW
BEGIN
-- 触发器内部逻辑
END;
```
2. 在触发器内部获取数据并插入 C 表
```sql
CREATE OR REPLACE TRIGGER trigger_name
AFTER UPDATE OF column_name ON A_table
FOR EACH ROW
BEGIN
INSERT INTO C_table (column1, column2, column3)
SELECT column1, column2, column3
FROM B_table
WHERE B_table.id = :new.id; -- 根据 A 表更新的行的 ID 获取对应的 B 表数据
END;
```
这样,当 A 表的某一行数据更新时,触发器会自动从 B 表获取对应的数据,并插入到 C 表中。需要注意的是,触发器内部的逻辑应该尽可能简洁,以避免对数据库性能造成影响。