一张表T_EDW_MNG_SETMT_ACFT_INFO_FILTER 和一张试图MNG_SRC.V_MNG_ACFT,通过SQL语句使用试图MNG_SRC.V_MNG_ACFT中的ACFT_SEAT_COUNT字段的值更新表T_EDW_MNG_SETMT_ACFT_INFO_FILTER中的zdzw和kgzw 两个字段的值。其中表一张表T_EDW_MNG_SETMT_ACFT_INFO_FILTER中有ACFT_NO字段 和一张试图MNG_SRC.V_MNG_ACFT的ACFT_REGST_NO字段值相同的
时间: 2023-07-21 07:06:14 浏览: 102
可以使用以下SQL语句来实现更新操作:
```sql
UPDATE T_EDW_MNG_SETMT_ACFT_INFO_FILTER
SET zdzw = V_MNG_ACFT.ACFT_SEAT_COUNT,
kgzw = V_MNG_ACFT.ACFT_SEAT_COUNT
FROM T_EDW_MNG_SETMT_ACFT_INFO_FILTER
JOIN MNG_SRC.V_MNG_ACFT ON T_EDW_MNG_SETMT_ACFT_INFO_FILTER.ACFT_NO = V_MNG_ACFT.ACFT_REGST_NO;
```
上述语句使用了UPDATE和JOIN语句来更新表T_EDW_MNG_SETMT_ACFT_INFO_FILTER中的zdzw和kgzw字段的值。通过将表T_EDW_MNG_SETMT_ACFT_INFO_FILTER和试图MNG_SRC.V_MNG_ACFT连接在一起,使用ACFT_NO字段和ACFT_REGST_NO字段的匹配条件来关联两个表。然后,通过将ACFT_SEAT_COUNT字段的值赋给zdzw和kgzw字段,来更新表T_EDW_MNG_SETMT_ACFT_INFO_FILTER中的对应记录的值。
相关问题
postgres 删除用户报错privileges for foreign table edw_opr.rpt_t_claim_rese_list_foreign privileges for foreign table edw_opr.ml_t_rese_list_foreign privileges for foreign table edw_opr.ml_t_rese_detail_list_foreign privileges for foreign table edw_opr.tmp_rpt_t_cy_ls_rate_d_his_t1_foreign privileges for foreign table edw_opr.rpt_t_calendr_year_l_rate_d_t2_foreign privileges for foreign table edw_opr.gsl_t_rese_coverage_info_m_foreign privileges for foreign table edw_opr.test_gcm_0514_04_foreign
在 PostgreSQL 中,如果你想要删除一个用户,但是该用户拥有外部表的权限,你需要先撤销该用户对这些外部表的权限,然后再进行删除操作。你可以按照以下步骤来操作:
1. 首先,通过以下命令查看该用户拥有权限的外部表:
```sql
SELECT table_schema, table_name
FROM information_schema.table_privileges
WHERE grantee = 'your_username' -- 替换成你要删除的用户的用户名
AND table_type = 'FOREIGN TABLE';
```
2. 对于每个返回的外部表,使用以下命令来撤销用户对该表的权限:
```sql
REVOKE ALL PRIVILEGES ON FOREIGN TABLE table_schema.table_name FROM your_username; -- 替换成对应的表和用户
```
例如:
```sql
REVOKE ALL PRIVILEGES ON FOREIGN TABLE edw_opr.rpt_t_claim_rese_list_foreign FROM your_username; -- 替换成对应的表和用户
```
3. 当你撤销了所有外部表的权限后,你可以使用以下命令删除该用户:
```sql
DROP USER your_username; -- 替换成要删除的用户名
```
请确保在执行这些操作之前,你具有足够的权限来修改用户和外部表的权限,并且谨慎操作以避免意外删除或修改。
SELECT case when A.saleguesttype = '1' then '1人' when A.saleguesttype = '2' then '2人' when A.saleguesttype = '3' then '3人' when A.saleguesttype = '4' then '4人' else '其他' end as saleguesttype , sum(tc) as tc_amount from edw_report_ph_db.ads_ph_five_minute_tc_fact_day A inner join edw_report_ph_db.edw_dim_bsc_t_dp_c_user_ph_jm B on A.STORECODE = B.STORE_CODE inner join edw_report_kfc_db.edw_dim_business_date C on A.bohbusinessdate = C.business_date_str where 1=1 and market_code is not null and market_code != '' and market_code in ('1') and regexp_replace(A.bohbusinessdate, '-', '') >= '20230302' and regexp_replace(A.bohbusinessdate, '-', '') <= '20230316' group by A.saleguesttype sql优化
这段 SQL 语句可以进行如下优化:
1. 对于字符串类型的字段,可以使用单引号或者双引号进行表示,因此可以将 `where` 子句中的数字常量使用单引号或双引号进行表示,如 `'1'`、`'2'`,这样可以提高代码的可读性。
2. `regexp_replace` 函数的使用会导致全表扫描,影响查询性能。可以将字符串类型的日期转换为日期类型,然后和日期类型的常量进行比较。
3. 在 `inner join` 子句中,可以使用表的别名来提高代码的可读性。
4. 对于复杂的 SQL 语句,可以使用 `explain` 命令分析查询计划,找到性能瓶颈并进行优化。
优化后的 SQL 语句如下所示:
```
SELECT
CASE
WHEN A.saleguesttype = '1' THEN '1人'
WHEN A.saleguesttype = '2' THEN '2人'
WHEN A.saleguesttype = '3' THEN '3人'
WHEN A.saleguesttype = '4' THEN '4人'
ELSE '其他'
END AS saleguesttype,
SUM(tc) AS tc_amount
FROM edw_report_ph_db.ads_ph_five_minute_tc_fact_day A
INNER JOIN edw_report_ph_db.edw_dim_bsc_t_dp_c_user_ph_jm B
ON A.STORECODE = B.STORE_CODE
INNER JOIN edw_report_kfc_db.edw_dim_business_date C
ON A.bohbusinessdate = C.business_date_str
WHERE market_code IS NOT NULL
AND market_code != ''
AND market_code IN ('1')
AND A.bohbusinessdate >= '2023-03-02'
AND A.bohbusinessdate <= '2023-03-16'
GROUP BY A.saleguesttype;
```
阅读全文