代码之家  ›  专栏  ›  技术社区  ›  Noble-Surfer

PHP/Laravel应用程序-查询通过第三个表关联的两个数据库表?内部连接

  •  0
  • Noble-Surfer  · 技术社区  · 7 年前

    此列中的单元格还显示一个“编辑”按钮,单击此按钮时将打开一个对话框,允许用户将另一个联系人添加到该表条目中-该对话框显示一个带有“名字”“姓氏”字段的窗体电子邮件”,并有一个“添加联系人”按钮。

    桌子的布置使 account.account

    '帐户ID'、'帐户名称'、'帐户类型ID',

    以及 account.property 表包含的值

    “属性ID”、“属性标签”、“属性标记”、“属性描述”。

    帐户.属性 表中,有两行包含用于不同通信方法的名称—一行带有“property tag” addresseename ,另一个带有“property tag” addresseenamepdf

    据我所知,表之间没有主键/外键关系,但我被告知它们是使用视图链接的 account.vAccount . 我已经有好几年没有用SQL做过任何基本的数据库编程了,我以前也没有遇到过视图,所以我不确定如何在查询中使用它们。。。

    在MS SQL SMS中,如果右键单击“account.vAccount”视图,并选择前1000行,则会看到查询:

    SELECT TOP (1000) [accountId]
      ,[name]
      ,[typeId]
      ,[accountType]
      ,[accountTypeTag]
      ,[typeParentId]
      ,[parentAccountType]
      ,[parentAccountTypeName]
      ,[balanceDate]
      , // several other values here
    FROM [myDB].[account].[vAccount]
    

    where 子句添加到查询的末尾:

    FROM [myDB].[account].[vAccount] where accountId = 53092;
    

    这只是返回 view 地址名称 地址名称PDF 帐户.属性 桌子。

    addressename & 地址名称PDF 我只想使用 accountId 值(即,在另一个表中的一个表中有一个外键)。

    看法 要检索此数据而不在表之间创建关系吗?如果可以,我该怎么做?

    因此,我似乎忽略了这两个表实际上是通过第三个表关联的(我刚刚开始使用这个应用程序)-这些表是:

    • 帐户ID(PK)
    • ...

    属性值

    • 帐户ID
    • ...

    财产

    • 属性ID(PK)
    • 属性标签
    • 物业标签
    • ...

    一对多 属性值 多对一 财产

    如何编写一个返回两个特定属性(属性 propertyId 价值观是 48 & 49 对于一个帐户 帐户ID 价值是 53092 ?

    我已尝试运行查询:

    SELECT TOP (1000) [accountID]
        ,[name
        ...
    FROM [myDB][account].[account] where accountID = 53092
    INNER JOIN [myDB].[account].[propertyValue] where propertyTag = 'ADDRESSEENAME' | propertyTag = 'ADDRESSEENAMEPDF';
    

    但当我尝试执行时,我得到一个错误,上面写着:

    为什么我会得到这个?我做错什么了?

    1 回复  |  直到 7 年前
        1
  •  1
  •   kkica    7 年前

    查询的结构应该是

    Select 
    From
    join on
    where
    group by
    Having.
    

    你有 where join 条款。

    SELECT TOP (1000) [accountID]
        ,[name
        ...
    FROM [myDB][account].[account] 
    INNER JOIN [myDB].[account].[propertyValue] ON … (you are missing the on clause)
    where accountID = 53092 and (
    propertyTag = 'ADDRESSEENAME' | propertyTag = 'ADDRESSEENAMEPDF');