簡體   English   中英

如何聯接兩個表,其中一個表沒有主鍵且字符長度不同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM