mysql 语句,删除info表的某些数据,这些数据满足的条件为 info表taskid字段 在task表查询为空
时间: 2024-03-17 08:43:07 浏览: 13
可以使用如下的 MySQL 语句来删除 `info` 表中满足 `taskid` 字段在 `task` 表查询结果为空的数据:
```
DELETE FROM info
WHERE taskid NOT IN (SELECT taskid FROM task)
```
这个语句使用了子查询来查询 `task` 表中所有的 `taskid`,然后删除 `info` 表中 `taskid` 不在这个列表中的所有数据。这里假设 `task` 表中的 `taskid` 字段与 `info` 表中的 `taskid` 字段是相同的,如果不是的话需要根据实际情况进行修改。
相关问题
java如何操作flowable的TASK_CREATED监听在ACT_RU_IDENTITYLINK表产生数据后执行
可以通过在Flowable的配置文件中配置一个监听器,在任务被创建时触发并执行一些逻辑。具体步骤如下:
1. 创建一个类并实现FlowableEventListener接口,重写onEvent方法,在该方法中判断事件类型是否为TASK_CREATED,如果是,则获取任务信息并执行需要的操作。
```java
public class TaskCreatedEventListener implements FlowableEventListener {
@Override
public void onEvent(FlowableEvent event) {
if (event instanceof FlowableEntityEvent) {
FlowableEntityEvent entityEvent = (FlowableEntityEvent) event;
if (FlowableEngineEventType.TASK_CREATED.equals(entityEvent.getType())) {
TaskEntity taskEntity = (TaskEntity) entityEvent.getEntity();
// 获取任务信息并执行需要的操作
}
}
}
@Override
public boolean isFailOnException() {
return false;
}
}
```
2. 在Flowable的配置文件中配置监听器,并设置监听器的优先级。在该配置中,需要将任务创建事件与监听器进行关联。
```xml
<bean id="taskCreatedEventListener" class="com.example.TaskCreatedEventListener"/>
<bean id="flowableEventRegistry" class="org.flowable.spring.registry.DefaultFlowableEventListenerRegistry">
<property name="eventListeners">
<list>
<bean class="org.flowable.spring.event.registry.GenericEventListenerContainer">
<property name="eventTypes">
<list>
<value>TASK_CREATED</value>
</list>
</property>
<property name="eventListener">
<ref bean="taskCreatedEventListener"/>
</property>
<property name="priority" value="100"/>
</bean>
</list>
</property>
</bean>
```
3. 在ACT_RU_IDENTITYLINK表产生数据后执行需要的操作,可以在监听器中进行判断并执行。
```java
public class TaskCreatedEventListener implements FlowableEventListener {
@Autowired
private RuntimeService runtimeService;
@Override
public void onEvent(FlowableEvent event) {
if (event instanceof FlowableEntityEvent) {
FlowableEntityEvent entityEvent = (FlowableEntityEvent) event;
if (FlowableEngineEventType.TASK_CREATED.equals(entityEvent.getType())) {
TaskEntity taskEntity = (TaskEntity) entityEvent.getEntity();
// 判断任务的identity link是否已经创建
boolean isIdentityLinkCreated = runtimeService.createIdentityLinkQuery()
.taskId(taskEntity.getId())
.count() > 0;
if (isIdentityLinkCreated) {
// 执行需要的操作
}
}
}
}
@Override
public boolean isFailOnException() {
return false;
}
}
```
通过以上步骤,就可以实现在任务创建时监听ACT_RU_IDENTITYLINK表的数据变化并执行需要的操作。
将表一的每一行数据根据taskID变量添加表二后面,taskID可能缺值或重复
好的,我理解了你的问题。你需要将表一中的每一行数据根据taskID变量添加到表二后面,同时考虑到taskID可能缺值或重复的情况。这个问题可以通过使用SQL语句来解决。
假设表一的名称是table1,表二的名称是table2,且两个表中都有一个名为taskID的列。你可以使用以下的SQL语句将表一的数据添加到表二后面:
```
INSERT INTO table2 (taskID, col2, col3, col4)
SELECT taskID, col2, col3, col4
FROM table1
WHERE taskID IS NOT NULL
```
这个SQL语句会将表一中taskID不为NULL的行添加到表二的末尾。如果表一中有taskID重复的行,那么这些行也会被添加到表二中,不会被去重。如果你需要去重,可以使用以下的SQL语句:
```
INSERT INTO table2 (taskID, col2, col3, col4)
SELECT taskID, col2, col3, col4
FROM table1
WHERE taskID IS NOT NULL
AND taskID NOT IN (SELECT taskID FROM table2)
```
这个SQL语句会将表一中taskID不为NULL且在表二中不存在的行添加到表二的末尾,从而避免了重复添加的问题。