sql父查询不包含子查询的值
时间: 2023-09-13 19:10:15 浏览: 46
如果你想要在 SQL 中编写一个父查询,但是不包含子查询中的某些值,你可以使用 NOT EXISTS 关键字来实现。
例如,假设你有两个表:一个是 `orders` 表,其中包含订单数据,另一个是 `order_items` 表,其中包含订单项数据。如果你想要选择所有订单,但不包含任何商品编号为 123 的订单项,你可以使用以下 SQL 查询:
```
SELECT * FROM orders o
WHERE NOT EXISTS (
SELECT 1 FROM order_items oi
WHERE oi.order_id = o.order_id
AND oi.product_id = 123
);
```
这个查询将选择所有订单,但不包含任何商品编号为 123 的订单项。你可以根据你的具体情况修改这个查询。
相关问题
mysql 根据子id查询父id
如果你有一个表格,其中包含子ID和父ID,你可以使用以下SQL语句来查询子ID对应的父ID:
```sql
SELECT parent_id FROM your_table WHERE child_id = your_child_id;
```
在这个查询中,`your_table`是你的表名,`parent_id`是你要查询的父ID列,`child_id`是你要查询的子ID,这个值可以被替换成你要查询的具体子ID。
oracle 递归查询 根据子节点查询出父节点下的全部子节点
要在Oracle中实现根据子节点查询出父节点下的全部子节点,可以使用CONNECT BY语句和START WITH语句结合使用。
假设我们有一个表格叫做employee,其中包含了员工的ID、名称以及上级ID。我们想要查询出某个员工的上级节点下的所有子节点,可以使用以下SQL语句:
```
SELECT * FROM employee
WHERE CONNECT_BY_ISLEAF = 1
START WITH id = <指定员工ID>
CONNECT BY PRIOR id = parent_id;
```
其中,CONNECT_BY_ISLEAF是Oracle提供的一个伪列,用于判断当前节点是否为叶子节点。START WITH指定了起始节点,CONNECT BY指定了递归的条件。PRIOR是Oracle提供的一个关键字,用于获取上一级节点的值。
这个SQL语句会查询出指定员工的上级节点下的所有子节点的信息。如果需要查询某个员工的同级节点下的所有子节点,可以将START WITH的条件改为对应员工的上级ID。
需要注意的是,如果表格中存在环形引用的情况,递归查询可能会进入死循环,需要注意避免。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)