我正在使用Laravel / Angular应用程序,并且在其中一个页面上有一个表单,其中显示一个表格,其中包含有关多个帐户的信息。该表中的一列标题为“联系人”,并且该列中的每个单元格都显示该表项的默认联系人的名称。
此列中的单元格还显示一个“编辑”按钮,单击该按钮将打开一个对话框,以允许用户向该表条目添加另一个联系人-对话框显示带有“名字”字段的表格'&'电子邮件',并带有“添加联系人”按钮。
对于要发送给该用户的信函中的名称应如何显示,也有一个简短的“预览”,即“ Hi forename surname”或“ Hi forename”,具体取决于联系人的类型以及正在使用信函模板。
在显示相关名称时遇到了一些麻烦,因为我不确定如何编写需要检索相关名称的SQL查询。
表的设置应使account.account
表包含以下值:
“帐户ID”,“帐户名称”,帐户类型ID”,
和account.property
表包含
“属性ID”,属性标签”,“属性标签”,“属性说明”。
在account.property
表中,有两行包含用于不同通信方式的名称-一行带有'property tag'addresseename
,另一行带有'property tag 'addresseenamepdf
。我想在对话框的“预览”中显示这些值,但是我不确定如何编写SQL来检索它们。
据我所知,表之间没有主键/外键关系,但有人告诉我它们是使用View 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
行。但是,我看不到要从addresseename
表中检索其数据的addresseenamepdf
和account.property
列。
我对SQL的(有限的)理解告诉我,我将需要在这两个表之间创建一个关系,以便能够查询我只想使用的addressename
和addresseenamepdf
值accountId
值(即具有另一个表中的一个表的外键)。
我的理解是否正确,还是可以使用view
来检索此数据而无需在表之间建立关系?如果可以的话,我该怎么做?
-编辑-
所以看来我想念这两个表实际上是通过第三个表关联的(我才刚刚开始在此应用程序上工作)-这些表是:
帐户
属性值
属性
表具有以下关系:
帐户一对多 propertyValue 多对一 property
我如何编写一个查询,该查询将返回两个特定属性(对于propertyId
值为{的帐户,其48
值为49
和accountId
的属性{1}}?
我尝试运行查询:
53092
但是当我尝试执行时,出现错误消息:
关键字“ INNER”附近的语法不正确。
我为什么要得到这个?我在做什么错了?
答案 0 :(得分:1)
查询的结构应为
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');