例如有三張表A,B,C,表A是單曲資訊表,表B是專輯資訊表,表C則是記錄一個人的瀏覽記錄,通過C.type來區分1:A,2:B,表C中的瀏覽id則是記錄了A.id或是B.id,如何查詢一個人的完整瀏覽記錄資訊,就是查詢出完整的單曲資訊或專輯資訊,并按時間排序
uj5u.com熱心網友回復:
union應該是最直觀的了,case when 也是能夠滿足需求的,表結構,和測驗資料不貼出來的話,可以自己百度一下怎么寫,這樣可以加深自己的理解
uj5u.com熱心網友回復:
--測驗資料
--表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 梁靜茹專輯
uj5u.com熱心網友回復:
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;
uj5u.com熱心網友回復:
建議你列出你的表結構,并提供測驗資料以及基于這些測驗資料的所對應正確結果。參考一下這個貼子的提問方式http://bbs.csdn.net/topics/320211382
1. 你的 create table xxx .. 陳述句
2. 你的 insert into xxx ... 陳述句
3. 結果是什么樣,(并給以簡單的演算法描述)
4. 你用的資料庫名稱和版本(經常有人在MS SQL server版問 MySQL)
這樣想幫你的人可以直接搭建和你相同的環境,并在給出方案前進行測驗,避免文字描述理解上的誤差。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/106500.html
標籤:MySQL
上一篇:max和min隔壁欄位排序問題?
