我确定这很简单,但谷歌搜索它会带来如何使用没有公共密钥。我有一列充满了公共密钥(在这种情况下是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中的预定义列等。
提前致谢
答案 0 :(得分:3)
您不能同时在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);
添加相关列后,使用联接(using the "multi-table" syntax described in the documentation)执行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
标识的实体的其他属性,则通过将hs
两者合并到s10
来删除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
。考虑到所有这些替代方案,我会坚持使用第一个并执行{{1}}后跟{{1}}。
答案 1 :(得分:0)
您可以使用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
然后你可以删除原来的两个表并按照你喜欢的方式重命名新创建的表。并且不要忘记在新表上创建必要的索引。