cd74025ab1ef2b5bf1ccc47dda95ee6c96cad20a
PostgreSQL.md
| ... | ... | @@ -802,6 +802,34 @@ PostgreSQL为JSON数据提供了丰富的操作符和函数,使得查询变得 |
| 802 | 802 | 使用GIN索引可以显著加快涉及`@>`、`?`等操作符的查询速度,这对于需要频繁进行这类查询的应用来说是非常重要的。 |
| 803 | 803 | |
| 804 | 804 | |
| 805 | +### 2.7 PostgreSQL UPDATE 语句中,更新列名时不能带别名 |
|
| 806 | + |
|
| 807 | +请注意,在 PostgreSQL 中,虽然可以在 UPDATE 语句中为表指定别名,但在实际使用这些列名时,并不需要(也不应该)通过别名来引用它们. |
|
| 808 | +条件可以带别名,但是列名不能带别名. |
|
| 809 | + |
|
| 810 | +```sql |
|
| 811 | +UPDATE tenant_user_instance t |
|
| 812 | +SET t."update_date" = TO_TIMESTAMP('2025-02-18 11:00:27.296', 'YYYY-MM-DD HH24:MI:SS.FF') |
|
| 813 | +WHERE t."action_dimension_id" = '04me8wsxbgrqt' |
|
| 814 | +AND t."user_id" = '04me9sszlk54b' |
|
| 815 | +AND t."instance_id" = '04me86gy87lxe' |
|
| 816 | +AND t."source" IN ('USER', 'BUSINESS_APP'); |
|
| 817 | +``` |
|
| 818 | + |
|
| 819 | +错误 [42703]: ERROR: column "t" of relation "tenant_user_instance" does not exist 表示在 tenant_user_instance 表中找不到名为 "t" 的列。实际上,这个错误通常是由表别名的误用引起的。在 PostgreSQL 中,更新语句可以使用表别名,但不需要像在 SELECT 语句中那样引用别名作为表名的一部分。 |
|
| 820 | + |
|
| 821 | +以下是修正后的 SQL 语句,移除了对别名 "t" 的不正确引用: |
|
| 822 | + |
|
| 823 | +```sql |
|
| 824 | + |
|
| 825 | +UPDATE tenant_user_instance t |
|
| 826 | +SET update_date = TO_TIMESTAMP('2025-02-18 11:00:27.296', 'YYYY-MM-DD HH24:MI:SS.FF') |
|
| 827 | +WHERE t.action_dimension_id = '04me8wsxbgrqt' |
|
| 828 | +AND t.user_id = '04me9sszlk54b' |
|
| 829 | +AND t.instance_id = '04me86gy87lxe' |
|
| 830 | +AND t.source IN ('USER', 'BUSINESS_APP'); |
|
| 831 | +``` |
|
| 832 | + |
|
| 805 | 833 | |
| 806 | 834 | # 第三节. PostgreSQL 基础教程 |
| 807 | 835 |