[英]How to join two tables with one of them not having a primary key and not the same character length
我正在處理兩個表: “ dyndomrun.ddid” =具有主鍵,而“ domainregion.domainid” =不具有任何主鍵或外鍵。
“ dyndomrun.ddid”定義是“字符變化”,具有8個字符,而“ domainregion.domainid”定義也是“字符變化”,但具有10個字符。
問題:domainregion表中的某些字段需要與dyndomrun表中的主鍵結合在一起。 我似乎無法使用如下簡單的JOIN語句來做到這一點:
SELECT domainregion.domainid, domainregion.dombegin, domainregion.domend, dyndomrun.ddid
FROM domainregion, dyndomrun
WHERE domainregion.domainid = dyndomrun.ddid
ORDER BY domainregion.domainid, dyndomrun.ddid, domainregion.dombegin, domainregion.domend;
我嘗試了JOINS,INNER JOINS,LIKE,它們似乎都不起作用。 我正在處理的數據庫是完全基於SQL的,使用PostgreSQL存儲的數據庫。
我是否可以使用一種方法,根據字符的長度選擇dyndomrun.ddid來選擇domainregion.domainid?
請指教。
嘗試使用此方法僅比較前8個字符:
SELECT r.domainid, r.dombegin, r.domend, d.ddid
FROM domainregion r
JOIN dyndomrun d ON r.domainid::varchar(8) = d.ddid
ORDER BY r.domainid, d.ddid, r.dombegin, r.domend;
強制轉換會隱式修剪尾隨字符。 ddid
只有8個字符。 也無需進行處理。 這樣可以達到相同的目的:
JOIN dyndomrun d ON left(r.domainid, 8) = d.ddid
但是,請注意,字符串函數left()
僅在PostgreSQL 9.1中引入。 在早期版本中,您可以替換為:
JOIN dyndomrun d ON substr(r.domainid, 1, 8) = d.ddid
__
該查詢使用JOIN
。 在手冊中閱讀更多有關該內容的信息 。
FROM domainregion r
表示FROM domainregion AS r
。 在這種情況下, AS
在PostgreSQL中只是噪音。 表別名使查詢更短,更易於閱讀,但在此沒有其他影響。 您還可以使用表別名來多次包含同一表。
連接條件ON r.domainid::varchar(8) = d.ddid
僅將兩個表達式完全匹配的行連接在一起。 再次,請閱讀手冊 (或任何其他來源) 中的那些基礎知識 。
這是一個簡單的查詢,在這里無需多解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.