場景:
有一個學習記錄表 A 記錄了 學習的用戶編號 和 學習的內容編號
table a ( userid , lecid )
有一個表 B 記錄了 用戶的分類情況,包含用戶編號和 分類編號
table b (userid , qid)
有一個表 c 記錄了 用戶和 其他用戶的關聯關系表, 包括 用戶編號 和 被關聯的用戶編號
table c (userid , ruid )
現在希望 通過 表 b 中 分類編號 qid , 檢索出 表 b 中 所有的 userid 以及 和 表 b 中檢索出的 userid 關聯的 表 c 中 ruid 在 表 a 中的 學習記錄
謝謝
uj5u.com熱心網友回復:
select b.userid,a.lceid from table a,table b,table c where b.qid = 查詢的 qid and b.userid = c.userid and c.userid = a.useriduj5u.com熱心網友回復:
SELECT
b.oid, a.*
FROM b -- 現在希望 通過 表 b 中 分類編號 qid , 檢索出 表 b 中 所有的 userid
INNER JOIN c ON b.userid=c.userid --- 以及 和 表 b 中檢索出的 userid 關聯的 表 c
INNER JOIN a ON c.ruid = a.userid -- 中 ruid 在 表 a 中的 學習記錄
uj5u.com熱心網友回復:
表b 中的分類條件 qid 條件賦值:
SELECT
b.oid, a.*
FROM b -- 現在希望 通過 表 b 中 分類編號 qid , 檢索出 表 b 中 所有的 userid
INNER JOIN c ON b.userid=c.userid --- 以及 和 表 b 中檢索出的 userid 關聯的 表 c
INNER JOIN a ON c.ruid = a.userid -- 中 ruid 在 表 a 中的 學習記錄
where b.qid = ?
這個結果不是我希望得到的
我希望的最終資料是 所有表 b 中的人, 以及表 b 中人 相 關聯的表 c 中的人的 所有在 表 a 中的學習記錄
uj5u.com熱心網友回復:
提供測驗資料和要的結果uj5u.com熱心網友回復:
抱歉,頭兩天外出了,有一個學習記錄表 A 記錄了 學習的用戶編號 和 學習的內容編號
table a ( userid , lecid )
1,1
1,2
1,3
2,1
3,2
3,4
4,1
4,3
5,1
5,2
有一個表 B 記錄了 用戶的分類情況,包含用戶編號和 分類編號
table b (userid , qid)
1,2
2,2
3,1
4,3
有一個表 c 記錄了 用戶和 其他用戶的關聯關系表, 包括 用戶編號 和 被關聯的用戶編號
table c (userid , ruid )
1,2
1,5
2,3
3,1
如果輸入表 b 的qid = 2, 希望得到的表 a 輸出是
1,1
1,2
1,3
2,1
5,1 //因為 1 關聯著 5
5,2
如果輸入 qid = 3
3,2
3,4
1,1 //因為 3 關聯著 1
1,2
1,3
uj5u.com熱心網友回復:
第一個inner join 沒有問題,是限制分類中的人
第二個 應該是加入 分類中的人 關聯的所有人的學習情況, 用inner 的話,不僅沒有關聯更多的人
uj5u.com熱心網友回復:
如果輸入表 b 的qid = 2, 希望得到的表 a 輸出是1,1
1,2
1,3
2,1
5,1 //因為 1 關聯著 5
5,2
-----------------------------------------
1 關聯著 5 是通過
1,2
1,5
的關系?
如果是的話,那么 表 b 的qid = 2, 對應的有兩個 userid
table b (userid , qid)
1,2
2,2
---> 為什么你找了 1 的關聯,沒有去找 2 的關聯?
uj5u.com熱心網友回復:
抱歉,確實弄錯了, 如果 qid = 2 的話,結果
1,1
1,2
1,3
2,1
5,1 //因為 1 關聯著 5
5,2
3,2 //因為 2 關聯編號 3
3,4
就是需要這種結果,謝謝
uj5u.com熱心網友回復:
SELECT a.*
FROM a, (
SELECT b.userid FROM b WHERE b.qid = 2
UNION
SELECT c.ruid FROM b, c WHERE b.qid = 2 AND b.userid = c.userid
)x WHERE x.userid = a.userid
uj5u.com熱心網友回復:
測驗了這個應該沒有問題了, 但關聯到實際專案的時候,還有些問題,
有一個表 c 記錄了 用戶和 其他用戶的關聯關系表, 包括 用戶編號 和 被關聯的用戶編號 , 這個關系還有一個關系名稱,而這里面保存了名稱序號
table c (userid , ruid , rxh)
1,2 , 1
1,5 , 2
2,3 , 2
3,1 , 3
表 d 是對應的序號表
rxh rname
1 經理
2 老板
3 組長
最后通過分類 qid = 1 能夠得到上面那些資料外, 還希望得到被檢索的對應人 名稱

謝謝
uj5u.com熱心網友回復:
沒有關聯的直接預設為 ‘本人’uj5u.com熱心網友回復:
SELECT a.*
FROM a, x.rname (
SELECT b.userid, '' as rname FROM b WHERE b.qid = 2
UNION
SELECT c.ruid , e.rname FROM b, c ,d WHERE b.qid = 2 AND b.userid = c.userid and d.rxh = c.rxh
)x WHERE x.userid = a.userid
可這樣得到的 rname 全部為空 ‘’
uj5u.com熱心網友回復:
SELECT a.* IFNULL(d.name, '本人') as name
FROM(
SELECT a.*
FROM a, (
SELECT b.userid FROM b WHERE b.qid = 2
UNION
SELECT c.ruid FROM b, c WHERE b.qid = 2 AND b.userid = c.userid
)x WHERE x.userid = a.userid
) LEFT JOIN d ON d.rxh = a.userid
uj5u.com熱心網友回復:
Error Code: 1248. Every derived table must have its own alias 0.000 sec
以上陳述句執行錯誤
uj5u.com熱心網友回復:
別名寫掉了SELECT a.* IFNULL(d.name, '本人') as name
FROM(
SELECT a.*
FROM a, (
SELECT b.userid FROM b WHERE b.qid = 2
UNION
SELECT c.ruid FROM b, c WHERE b.qid = 2 AND b.userid = c.userid
)x WHERE x.userid = a.userid
) a LEFT JOIN d ON d.rxh = a.userid
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/101074.html
標籤:MySQL
