例如有三张表A,B,C,表A是单曲信息表,表B是专辑信息表,表C则是记录一个人的浏览记录,通过C.type来区分1:A,2:B,表C中的浏览id则是记录了A.id或是B.id,如何查询一个人的完整浏览记录信息,就是查询出完整的单曲信息或专辑信息,并按时间排序

解决方案 »

  1.   

    union应该是最直观的了,
    case when 也是能够满足需求的,表结构,和测试数据不贴出来的话,可以自己百度一下怎么写,这样可以加深自己的理解
      

  2.   


    --测试数据
    --表A
    IF OBJECT_ID('tempdb..#tabA') IS NOT NULL
    DROP TABLE #tabA
    CREATE TABLE #tabA(
    id int IDENTITY(1,1),
    NAME VARCHAR(20),
    )
    INSERT INTO #tabA
    SELECT '求佛' union all
    SELECT '老鼠爱大米'
    --表B
    IF OBJECT_ID('tempdb..#tabB') IS NOT NULL
    DROP TABLE #tabB
    CREATE TABLE #tabB(
    id int IDENTITY(1,1),
    NAME VARCHAR(20),
    )
    INSERT INTO #tabB
    SELECT '周杰伦专辑' union all
    SELECT '梁静茹专辑'
    --表C
    IF OBJECT_ID('tempdb..#tabC') IS NOT NULL
    DROP TABLE #tabC
    CREATE TABLE #tabC(
    id int,
    [TYPE] VARCHAR(5),
    dt DATETIME
    )
    INSERT INTO #tabC
    SELECT 1,'1',GETDATE() UNION ALL
    SELECT 2,'1',GETDATE() UNION ALL
    SELECT 1,'2',GETDATE() UNION ALL
    SELECT 2,'2',GETDATE()
    --测试数据结束;WITH cte AS (
    SELECT t1.*,t2.NAME FROM #tabC t1
    INNER JOIN #tabA t2 ON t1.id=t2.id 
    WHERE t1.[TYPE]='1' 
    UNION ALL
    SELECT t1.*,t2.NAME FROM #tabC t1
    INNER JOIN #tabB t2 ON t1.id=t2.id 
    WHERE t1.[TYPE]='2'
    )
    SELECT * FROM cte ORDER BY dt id          TYPE  dt                      NAME
    ----------- ----- ----------------------- --------------------
    1           1     2017-10-23 16:46:35.647 求佛
    2           1     2017-10-23 16:46:35.647 老鼠爱大米
    1           2     2017-10-23 16:46:35.647 周杰伦专辑
    2           2     2017-10-23 16:46:35.647 梁静茹专辑
      

  3.   

    SELECT 
        C.ID ID, C.TYPE Type, MAX(C.R_DATE) as '时间', A.NAME as '专辑', B.NAME as '专辑'
    FROM
        music A,
        ALBUM B,
        user_records C
    WHERE
        A.ID = C.ID AND B.ID = C.ID
    GROUP BY ID;
      

  4.   

       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。