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