簡體   English   中英

使用SQL中的公共鍵將兩個表/添加列連接到原始表

[英]Join two tables/add columns to original with common key in SQL

我敢肯定這很簡單,但是使用谷歌搜索就可以找到沒有通用密鑰的方法。 我有一欄充滿了通用鍵(在這種情況下,provider_num)

基本上我的第一個表(稱為“ s10”)如下所示:

provider_num | provider_name | state | phone_number`

10001        | johns creek   | ga    | 555-5555`

第二個就是這樣(稱為“ hs”)

provider_num | latitude | longitude | IDS_num

10001        | -89.0023 | -82.4729  | stn0021

我想用一張看起來像這樣的桌子結束

provider_num | provider_name | state | phone_number | latitude | longitude | IDS_num

這可能嗎?

到目前為止,我只寫了一個像這樣的簡單插入

INSERT INTO s10
hs.latitude, hs.longitude, hs.IDS_num
where s10.provider_num = hs.provider_num

但是我想知道我是否缺少某些東西,例如在運行它之前在s10中預定義的列,等等。

提前致謝

您不能同時在s10創建列並在同一SQL語句中填充它們的值。 您首先需要一個ALTER TABLE來添加列,然后是一個UPDATE (使用INNER JOIN )來填充它們:

-- s10 already exists, but with limited columns
-- Add the other columns (use the correct data types - I just guessed here)
ALTER TABLE s10
  ADD latitude DECIMAL(10,2) [NULL or other attrs],
  ADD longitude DECIMAL(10,2) [NULL or other attrs],
  ADD IDS_num VARCHAR(32);

添加相關列之后,使用UPDATE執行UPDATE使用文檔中描述的“多表”語法 ):

UPDATE s10 INNER JOIN hs ON s10.provider_num = hs.provider_num
  SET 
    s10.latitude = hs.latitude,
    s10.longitude = hs.longitude,
    s10.IDS_num = hs.IDS_num;

另一種解決方案是將兩個表保持原樣,然后創建一個視圖來查詢兩個表:

CREATE VIEW combined_tables AS (
  SELECT
    s10.provider_num,
    provider_name,
    state,
    phone_number,
    latitude,
    longitude,
    IDS_num
  FROM 
   s10 
   INNER JOIN hs ON s10.provider_num = hs.provider_num
);

但是,如果hs僅包含由provider_num標識的實體的其他屬性,則通過將兩者合並為s10來消除hs表確實是有意義的。

另一種選擇是使用CREATE TABLE AS SELECT通過查詢其他表(使用與視圖中使用的SELECT相同)來創建新表:

CREATE TABLE s10_combined AS 
 SELECT
    s10.provider_num,
    provider_name,
    state,
    phone_number,
    latitude,
    longitude,
    IDS_num
  FROM 
   s10 
   INNER JOIN hs ON s10.provider_num = hs.provider_num;

上面產生了一個新表s10_combined ,之后您可以刪除其他兩個表。 盡管有所有這些選擇,但我只會堅持第一個選擇,先執行ALTER然后執行UPDATE

您可以使用CREATE TABLE x AS SELECT語句。 在您的情況下:

CREATE TABLE newtablename AS
SELECT the-fields-you-want FROM s10 INNER JOIN hs ON s10.provider_num = hs.provider_num

然后您可以刪除原來的兩個表,並以自己喜歡的方式重命名新創建的表。 並且不要忘記在新表上創建必要的索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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