1
INSERT INTO Activity_Feed (userID,Type,DataIDs,PodID) 
VALUES ( 1437
      , 'eventattend'
      , (SELECT LEFT(EventID, LEN(eventID) - 1 as nvarchar) 
         FROM ( 
            SELECT EventiD + ', ' 
            FROM   events 
            FOR XML PATH ('')) c (EventID))
      , 5)

基本上我想从一个表中取出一堆 ID,并将它们作为逗号分隔的字符串插入到 varchar 字段中。

例如

Activity_Feed (table)

activityID   1
userID       2
DataIDs      1,3,4,56,367 // This would be the (Select Ids FROM bit)

我想从表中取出一堆 RSVP ID 并将它们的 ID 粘贴在字段中......

为了进一步解释,由于此查询的性质,我想避免对查询进行规范化。让我知道我是否还应该分离出数据......

活动提要的工作方式是这样的......

我在活动中创建了一个新条目,类型为event_attending(这是我正在参加的活动。

我给它加上时间戳,我在字段中输入事件的 ID在 6 小时内dataIDs匹配的任何新活动都会event_attending触发update记录而不是insert

我保持时间戳不变,但更新了与该时间段关联的 ID,因此基本上使用该时间段内的最新事件出席来更新 ID。

我认为规范化似乎有点矫枉过正:D 标准化是否有矫枉过正之类的东西?

4

1 回答 1

4

始终规范化您的数据库。

完全没有错,但在数据库设计中非常糟糕。

这很差的原因:

  • 很难加入表格
  • 很难找到价值

为什么不创建这样的表,

活动

  • 活动ID
  • 活动名称

喂养

  • 饲料ID
  • 饲料名称

Activity_Feed

  • 饲料ID
  • 活动ID

所以Activity_Feed表将包含这样的东西

FeedID  ActivityID
=====================
1         1
1         2
1         3
2         1
2         3
3         2
3         1

你现在可以加入表格,

SELECT  a.ActivityName, c.FeedName
FROM    Activity a
        INNER JOIN Activity_Feed b
            ON a.ActivityID = b.ActivityID
        INNER JOIN Feed c
            ON b.FeedID = c.FeedID
-- WHERE  a.ActivityName = 1             -- or something like this
于 2012-11-01T16:40:31.260 回答