需要查询SQL Server

时间:2014-11-15 12:05:28

标签: sql sql-server

我有两张桌子:

Users

UserID(int)   Username   Password   PagesID(varchar(50))
---------------------------------------------------------
  1            admin       123       1,2,3,4
  2             user       456       1,3

Pages

PageID(int)       PageURL         PageTitle
---------------------------------------------
   1           article.aspx        Articles
   2            News.aspx           News
   3           reports.aspx         Reports
   4            Users.aspx          Users

我想从user.pageURL表中获取PageTitlepagesUsers

我需要查询相同的+用户信息: (此查询返回没有行的列。)

select p.PageURL 
from Pages p
where CONVERT(Varchar(50), p.PageID) in (select u.PagesID 
                                         from Users u
                                         where u.ID = 1)

1 个答案:

答案 0 :(得分:4)

您的数据结构非常糟糕。 SQL有一个很好的方法来存储事物列表 - 它被称为表,而不是字符串。您应该有一个联结表,每个用户和每篇文章有一行。因此,在UserPages中,第一个用户将有四行。

有时,我们会遇到无法更改的数据。如果是这种情况,你可以做你想做的事,但效率很低。这是一种方式:

select u.UserId, p.*
from users u join
     pages p
     on ',' + u.PagesId + ',' like '%,' + cast(p.pageId as varchar(255)) + ',%';