如何在两个表之间找到合适的用户

时间:2017-11-24 16:37:15

标签: mysql sql

我的数据库中的两个表中有这样的东西

“用户”表

userId         viewsIDS       
  1            1,2,3,4,5        
  2           2,4,6,12,13       
  3             1,4,5           
 ...             ...            

“查看”表

viewID        webpageId       
  1              1            
  2              1            
  3              2            
  4              3
  5              3
  6              3            
 ...            ...

现在,我应该使用哪个查询来查找只有网页ID的用户ID?

我想应该以某种方式从“View”表中对“viewIDs”进行分组,然后检查其中一个ID是否在User“viewIDS”字段中,以便取出userID,但我不知道哪个查询会使更好的方式。

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

CREATE TABLE #USER (userId INT, viewsId VARCHAR(50))
CREATE TABLE #VIEW (viewId INT, webPageId INT)

INSERT INTO #USER
        SELECT 1, '1,2,3,4,5'
UNION   SELECT 2, '2,4,6,12,13'
UNION   SELECT 3, '1,4,5'

INSERT INTO #VIEW 
        SELECT  1,1            
UNION   SELECT  2,1            
UNION   SELECT  3,2            
UNION   SELECT  4,3
UNION   SELECT  5,3
UNION   SELECT  6,3


SELECT u.userId, v.webPageId FROM #USER u
CROSS APPLY fnSplitString(viewsId, ',') s
INNER JOIN #VIEW v ON s.splitdata = v.viewId
ORDER BY u.userId

我将这个函数 fnSplitString 复制到:

http://www.sqlservercentral.com/blogs/querying-microsoft-sql-server/2013/09/19/how-to-split-a-string-by-delimited-char-in-sql-server/

但正如之前所说,你应该规范你的表;)