Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL注释加入两次,因为它们与服务而不是单元相关_Sql_Sql Server_Tsql - Fatal编程技术网

SQL注释加入两次,因为它们与服务而不是单元相关

SQL注释加入两次,因为它们与服务而不是单元相关,sql,sql-server,tsql,Sql,Sql Server,Tsql,好的,我有一个如下所示的数据库: 订单、服务、订单单位、备注 Orders: id Services: id, orderid Units: id, Orderid, unitnumber Notes: id, relatedid, text, date 订单有1到多个订单单位 订单有1到多个服务 服务有1到多个注释 我试图只关联与该单元相关的注释并显示这些记录,问题是注释和单元之间没有数据库关系,只有服务和注释 我正试图获得以下信息: select u.unitnumber ,n

好的,我有一个如下所示的数据库: 订单、服务、订单单位、备注

Orders: id
Services: id, orderid
Units: id, Orderid, unitnumber
Notes: id, relatedid, text, date
订单有1到多个订单单位 订单有1到多个服务 服务有1到多个注释 我试图只关联与该单元相关的注释并显示这些记录,问题是注释和单元之间没有数据库关系,只有服务和注释

我正试图获得以下信息:

select u.unitnumber
      ,n.date
      ,o.id
      ,s.id
      ,n.text
 FROM tblorders o
 INNER JOIN tblServices s on o.id = s.orderid
 INNER JOIN tblUnits u on o.id = u.orderid
 INNER JOIN tblNotes n on s.id = n.RelatedId
 WHERE n.Text LIKE '<p>The status for the Unit # % has changed from % to OUTTOVENDOR</p>'
这里的问题是,如果同一服务中有2个单位,那么这会给我2个单位4次,因为服务与票据相关,而不是与单位相关

便笺中确实包含单元号,所以我想知道我是否可以在那里做些什么,以某种方式将便笺与单元号联系起来


谢谢

您需要订购单位吗?如果您有与notes相关的服务相关的订单,订单->订单单位关系将导致您的记录集呈指数增长,正如您所看到的,因为那里没有直接关系。

假设u.unitnumber是一个整数:

select u.unitnumber
      ,n.date
      ,o.id
      ,s.id
      ,n.text
 FROM tblorders o
 INNER JOIN tblServices s on o.id = s.orderid
 INNER JOIN tblUnits u on o.id = u.orderid
 INNER JOIN tblNotes n on s.id = n.RelatedId
        AND n.Text LIKE '<p>The status for the Unit # % has changed from % to OUTTOVENDOR</p>' 
        AND CAST(SUBSTRING(n.Text, 30, CHARINDEX(' ', n.Text, 30) - 30) AS int) = u.unitnumber

如果注释总是与单元相关,那么最好是修复设计,而不是用性能杀手的东西进行修改。为什么不能为unitid添加一列,使用hack来填充它一次以获取现有数据,然后在添加注释时将用户界面更改为添加单元id

顺便说一句,如果您使用的是一个文本字段,并且这些字段已被弃用,那么您可能应该尽快将其更改为varcharmax。假设您使用的是SQL Server 2005或更高版本

如果可能,请将每个表中的列重命名为相同的列。不要在order表中仅称其为ID,可以将其称为OrderID大写。因为RelatedID引用服务表,所以将其改为ServiceID,以便大声呼喊!这将节省大量重命名、别名、不正确的连接和全面的混乱。我向你保证

如果注释始终是关于单位的,则需要通过列将注释与单位进行关联。您只需将列UnitID添加到Notes表中。其他任何东西都是一种可怕的、破坏性能的黑客行为,它会回来困扰你

即使将UnitID添加到Notes表中,仍然没有完全规范化,因为注释可能引用的服务和单元顺序不同。请您详细解释一下什么是单位和服务,以及它们和注释之间的关系?我打赌有办法解决它


顺便说一句,注释始终从%开始,直到%,显然单位发生了变化。如果注释中引用了单位,则可以使派生表使用计算列,从注释文本中提取单位,并使用该列关联注释。这是一个黑客-任何符号上的不一致都必须解决。这正是我想做的。是的,这实际上是我需要单位的全部问题……单位在注释中,但实际上与数据库无关。我知道很棒的设计;你能把orderunits聚合起来,这样每个订单只返回一行吗?1.这些列实际上有那些命名约定,我刚才快速写了这个问题,以便于举例。2.我意识到,我不是在设计应用程序,但我在推动变革!3.我现在正在使用黑客破解的解决方案,同时推动变革!是的,我建议他们停止使用ID,每次我看到有人使用它,我都会退缩。