Sqlite

如何自動重命名來自同一個表連接的列?

  • April 30, 2020

當我加入兩個表以避免衝突時,我使用列別名。但是如果有很多列,這很容易出錯。此外,一些 ORMS 要求對列名使用硬編碼或動態前綴。是否有自動重命名列的方式,使 T22 中的所有列都以“c_t22_”開頭,而 T23 中的所有列都以“c_t23_”開頭?

select T1.id,
      T1.p1, T21.name as p1_name,
      T1.p2, T22.name as p2_name,
      T1.p3, T23.name as p3_name
from T1
join T2 as T21 on T1.p1 = T21.id,
join T2 as T22 on T1.p2 = T22.id,
join T2 as T23 on T1.p3 = T23.id

SQLite 被設計為一個小型嵌入式數據庫,可以從“真正的”程式語言訪問,因此它沒有內置的動態 SQL 機制。

您必須從其他程式語言內部構造 SQL 查詢;像這樣的東西:

cols = []
for tab in tables:
   for col in columns:
      cols.append("c_{}_{}".format(tab, col))
sql = "SELECT " + ", ".join(cols) + " ..."
execute(sql)

引用自:https://dba.stackexchange.com/questions/265923