PostgreSQL基于同一个表更新行

时间:2017-12-21 12:42:09

标签: sql postgresql

您好我会根据同一个表更新行。复制专栏"数据"到数据为&#34的每一行;" (空)。 "键"在这行中是一样的。

<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.MainActivity"
tools:showIn="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/large_text"
/>
</android.support.v4.widget.NestedScrollView>

我已尝试过类似的东西,但&#34;关系a不存在&#34;:

    id |data |key 
   ----|-----|-----
    1  | xyz |key1
   ----|-----|-----
    2  | ""  |key1

2 个答案:

答案 0 :(得分:5)

在Postgres SQL中,您不应该在FROM子句中重复目标表的名称(因此您不能使用JOIN)

UPDATE table_a dst   -- <<-- target table
SET data = src.data
FROM table_a src     -- <<--- same table, different alias
WHERE dst.key = src.key
AND dst.data = '""'
AND src.data <> '""'
        ;

答案 1 :(得分:2)

在Postgres中,语法为:

UPDATE a
    SET a.data = b.data
    FROM a b
    WHERE a.key = b.key AND b.data <> '""' AND a.data = '""';

注意:这假定a是表名; b是表格的别名,&#34;加入&#34;条件在WHERE子句中。