我正在使用PostgreSQL。
我有桌子A,B,C& d。
表A有一个表B的外键(所以一对多)。
表C& D具有表A的外键(一对多)。 所以它看起来像:
B: - >答: - > C& d
现在我想添加一个中间表E来建立关系:
E: - > C& D(一对多)
B - > E(与fk一对一)
B: - > A(一对多)
我需要它来引入表F,表F也有表E的外键。
表E只有一个标识列'id'。
现在我必须编写一个迁移,并且不知道如何向E添加行并同时更新B
在伪SQL中,它必须如下所示:
更新B SET A_id = id INSERT INTO A(id)
答案 0 :(得分:1)
您可以使用WITH
语句:
WITH inserted_rows AS (
INSERT INTO A(...) VALUES (...) RETURNING *
) UPDATE B SET A_id = a.id FROM inserted_rows a WHERE ...;
WHERE
子句应过滤B
的匹配行。不幸的是,你的问题很广泛,所以我不能给你一个更详细的例子。
答案 1 :(得分:-1)
添加临时列可以帮助我。
package com.aryvart.myaromasupply;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.CoordinatorLayout;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.Button;
import android.widget.ListView;
import com.aryvart.myaromasupply.Adapter.CartListAdapterKV;
import com.aryvart.myaromasupply.Bean.CommonBean;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
/**
* Created by android01 on 28/8/17.
*/
public class CartPageKV extends Activity implements MyInterface {
String json = null;
List<CommonBean> movieList = new ArrayList<>();
RecyclerView recyclerView;
CartListAdapterKV mAdapter;
Context context;
CoordinatorLayout coordinatorLayout;
Button btn_submit;
HashMap<String, JSONObject> hsFilterGmap;
String value;
JSONArray jsonArray;
ListView llView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cart_page_kv);
context = this;
recyclerView = (RecyclerView) findViewById(R.id.my_recyclerView);
btn_submit = (Button) findViewById(R.id.btn_submit);
coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinator_layout);
llView = (ListView) findViewById(R.id.ll_view);
loadJSONFromAsset();
//Response API
try {
JSONObject obj = new JSONObject(json);
Log.e("NN", "json-->" + obj.toString());
JSONArray respArray = obj.getJSONArray("results");
Log.e("NN", "respArray-->" + respArray.toString());
for (int i = 0; i < respArray.length(); i++) {
JSONObject jsonObj = respArray.getJSONObject(i);
CommonBean drawerBean = new CommonBean();
drawerBean.setStr_cart_id(jsonObj.getString("id"));
drawerBean.setStr_cart_title(jsonObj.getString("name"));
drawerBean.setStr_quan(jsonObj.getString("quantity"));
drawerBean.setStr_tot_quant(jsonObj.getString("total_quantity"));
movieList.add(drawerBean);
}
// Getting adapter by passing xml data ArrayList
mAdapter = new CartListAdapterKV(movieList, context, (MyInterface) context);
llView.setAdapter(mAdapter);
} catch (JSONException e) {
e.printStackTrace();
}
//Button Click Event
btn_submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.e("NN:fc", String.valueOf(hsFilterGmap));
Iterator myVeryOwnIterator = hsFilterGmap.keySet().iterator();
JSONArray jsonArray = new JSONArray();
while (myVeryOwnIterator.hasNext()) {
String key = (String) myVeryOwnIterator.next();
JSONObject value1 = hsFilterGmap.get(key);
Log.e("NN:value", value1.toString());
jsonArray.put(value1);
}
Log.e("NN:fcAr", jsonArray.toString().replaceAll("\\\\", ""));
System.out.println("the JSON ARRAY is" + jsonArray.toString());
}
});
}
public String loadJSONFromAsset() {
try {
InputStream is = getAssets().open("data.json");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
json = new String(buffer, "UTF-8");
} catch (IOException ex) {
ex.printStackTrace();
return null;
}
return json;
}
// Interface to get Checked value from listview(Hashmap for not allowing duplicates)
@Override
public HashMap<String, JSONObject> getUnCheckedVal(HashMap<String, JSONObject> strVal, String str_removed_id) {
hsFilterGmap = strVal;
Log.e("NN:fc", String.valueOf(hsFilterGmap));
return hsFilterGmap;
}
}