插入到声明中

时间:2014-03-22 21:49:06

标签: sql database ms-access insert-into

我有一张桌子

                                            Moon PIS
    pID        pAddr        cID        cName        leaseExp        mRent        oID        oName        oContact

    pID – property id: coded to identify the specific property, chosen to be primary key.
    pAddr – property address, required (ie, cannot be null)
    cID – client id: coded to identify the client – null means not rented out yet
    cName – client name – null means not rented out yet
    leaseExp – lease Expiration date – null allowed, if not rented out yet.
    mRent – monthly rent (in dollars) – null allowed.
    oID – owner id: coded to identify the property owner, required (ie, cannot be null)
    oName – owner name, required (ie, cannot be null)
    oContact – owner’s contact address.

我想要将此表标准化 我为属性,所有者和客户创建了一个表。 属性表有 pID,pAddr 客户端表有 cID,cName 所有者表有 oID,oName,oContact

首先,我想知道是否正确地将表正常化了?

如果是这样,那么我需要将MoonPIS表中的数据移动到新创建的表中。我试过了:

    INSERT INTO Property (PropertyID, PropertyAddr)
    SELECT pID, pAddr FROM Moon PIS

我收到错误说" Microsoft Access数据库引擎无法找到输入表或查询“月亮”。确保它存在并且其名称拼写正确。"

我必须在传输数据之前建立关系。我所做的就是创建表格和列。

2 个答案:

答案 0 :(得分:2)

您需要转义名称,因为它包含空格:

INSERT INTO Property (PropertyID, PropertyAddr)
    SELECT pID, pAddr
    FROM [Moon PIS];

答案 1 :(得分:2)

  

这个问题对于这个问题没有效果,因为它引用的是原始表格,而不是问题中建议的更改...但我现在暂时离开,因为我认为它可能会无论如何,如果有人不同意我会删除它。

首先,我想知道是否正确地规范了表格?

不,它没有正确规范,因为它记录了多种类型的entites(属性,客户和所有者)的数据。您将要将客户端详细信息(cName)和所有者详细信息(oName和oContact)移动到他们自己的表(可能是客户端和所有者),并将cId和oID保留为外键。

此外,这个表应该记录什么,现在你包含了许多不依赖于主键(propertyId)的数据。以rent为例,租金是绑定到一个房产还是与客户的特定合同相关并且可以根据客户变化?如果是这样,它不属于属性表。等等...

规范化关系设计可能很难(并且涉及形式逻辑),但如果你希望你的设计有效,那么它就是值得花一些时间学习的主题。

对于查询错误,请勿在表名中使用空格:)