把下面sql改写为oracle语法,delete from mdm_enterprise_business_info a inner join temp_asset_table b on a.ASSET_ID=b.id and a.ORG_CODE=b.ASSET_OWNER_CODE and b.BATCH_ID = a.batch_id;
时间: 2024-03-06 11:46:49 浏览: 22
在Oracle中,可以使用以下语法来执行相同的操作:
```
DELETE FROM mdm_enterprise_business_info a
WHERE EXISTS (
SELECT 1
FROM temp_asset_table b
WHERE a.ASSET_ID = b.id
AND a.ORG_CODE = b.ASSET_OWNER_CODE
AND b.BATCH_ID = a.batch_id
);
```
其中,使用了 `EXISTS` 子查询来判断 `a` 表中的记录是否需要被删除。注意,在 Oracle 中, `INNER JOIN` 语法不支持在 `DELETE` 语句中使用。
相关问题
SELECT t.*, m1.MD_DESCRIPTION AS mapping_column_1, m2.MD_DESCRIPTION AS mapping_column_2 FROM supplier_info t INNER JOIN uf_MDM_jyfzsj m1 ON t.VENDOR_CODE = m1.MD_NUM INNER JOIN uf_MDM_jyfzsj m2 ON t.HIS_BUYER_VENDOR_CODE = m2.MD_NUM; supplier_info t t.HIS_BUYER_VENDOR_CODE 不去除其中为null的数据sql
抱歉,我刚才的回答有误。在 SQL 中,使用 `INNER JOIN` 连接两个表时,只有在连接字段的值相等的情况下,才会在结果集中返回这两个表中的数据。因此,在上述 SQL 语句中,如果 `t.HIS_BUYER_VENDOR_CODE` 的值为 `null`,那么它就无法与 `uf_MDM_jyfzsj` 表中的任何一行进行匹配,从而不会出现在结果集中。
如果你想要排除 `t.HIS_BUYER_VENDOR_CODE` 字段为 `null` 的数据,可以将 `INNER JOIN` 改为 `LEFT JOIN`,并在 `WHERE` 子句中添加条件 `t.HIS_BUYER_VENDOR_CODE IS NOT NULL`,具体如下所示:
```sql
SELECT t.*, m1.MD_DESCRIPTION AS mapping_column_1, m2.MD_DESCRIPTION AS mapping_column_2
FROM supplier_info t
LEFT JOIN uf_MDM_jyfzsj m1 ON t.VENDOR_CODE = m1.MD_NUM
LEFT JOIN uf_MDM_jyfzsj m2 ON t.HIS_BUYER_VENDOR_CODE = m2.MD_NUM
WHERE t.HIS_BUYER_VENDOR_CODE IS NOT NULL;
```
在上述 SQL 语句中,使用了两个 `LEFT JOIN` 连接表,这样即使 `t.HIS_BUYER_VENDOR_CODE` 的值为 `null`,它仍然会出现在结果集中。然后在 `WHERE` 子句中添加条件 `t.HIS_BUYER_VENDOR_CODE IS NOT NULL`,就可以排除其中为 `null` 的数据了。
GRANT ALL PRIVILEGES ON 'a_*' TO 'mdm'@'localhost' 语法有错吗?
是的,您提供的 GRANT 语句存在语法错误。正确的语法应该是:
```
GRANT ALL PRIVILEGES ON `a\_%`.* TO 'mdm'@'localhost';
```
在这个语句中,我们使用了反斜杠来转义下划线字符。这是因为在 MySQL 中,下划线(_)是一个通配符,表示匹配任意单个字符。为了将下划线字符视为字面值而不是通配符,我们需要使用反斜杠进行转义。
另外,使用反引号(`)将数据库名模式 `a\_%` 括起来,以便正确识别数据库名。这是因为数据库或表名中包含特殊字符时,需要使用反引号进行引用。
请注意,在实际使用时,确保将 `a_*` 替换为正确的数据库名模式,并将 'mdm'@'localhost' 替换为适当的用户名和主机名。