[英]MySQL FULL JOIN one table, and LEFT JOIN another in the same query?
我有三個表,我想在這一個查詢中鏈接。
該腳本是一個出勤登記簿,因此它為每個用戶記錄每次會議的出勤標記。
使用的三個表:
“球隊”:
id | fullname | position | class | hidden
1 | Team | -- | black | 1
2 | Dan S | Team Manager | green | 0
3 | Harry P | Graphic Engineer | blue | 0
“寄存器”:
id | mid | uid | mark
1 | 1 | 2 | /
2 | 1 | 3 | I
3 | 2 | 1 | /
4 | 2 | 3 | /
“會議”:
id | maintask | starttime | endtime
1 | Organise Year Ahead | 1330007400 | 1330012800
2 | Gather Ideas | 1330612200 | 1330617600
3 | TODO | 1331217000 | 1331222400
有一個數據樣本。 我想做的是:
從寄存器中選擇所有結果,由用戶對它們進行分組,然后按會議開始時間對它們進行排序。 但是,如果寄存器表中沒有標記,我希望它顯示“ - ”(如果需要可以通過php完成)所以預期結果如下:
fullname | mark | mid
Dan S | / | 1
Dan S | / | 2
Dan S | - | 3
Harry P | I | 1
Harry P | / | 2
Harry P | - | 3
我的SQL查詢目前是這樣的:
選擇你。
fullname
,你。id
,r。mark
河mid
FROMteam
u FULL JOINregister
r ON r。uid
=你。id
LEFT JOINmeetings
M於河mid
= m。id
GROUP BY你。id
ORDER BY m。starttime
ASC
我從MySQL收到錯誤:
您的SQL語法有錯誤; 檢查與您的MySQL服務器版本對應的手冊,以便在'FULL JOIN
register
r ON r附近使用正確的語法。uid
=你。id
LEFT JOINmeetings
M於河mid
= m .id'在第1行
但是,我無法看到它的問題:S
請有人幫忙,指出正確的方向或給我一個可能的解決方案。 非常感激
擔
答案:查詢有效:
SELECT
u.fullname, u.id as uid,
if(r.uid = u.id, r.mark, '-') as mark,
if(r.uid = u.id, r.mid, '-') as mid,
r.mid, m.starttime
FROM
team u
CROSS JOIN
register r ON u.id = r.uid
LEFT OUTER JOIN
meetings m ON r.mid = m.id
WHERE
u.hidden = 0
GROUP BY
u.id, r.mid
ORDER BY
m.starttime, u.id ASC
MySQL不支持Full outer join
。 至少到5.6版,您可以查看MySQL Join doc 。 cross join
可能是一種解決方法:
EDITED
SELECT
UxM.fullname,
r.mark,
UxM.mid,
UxM.starttime
FROM
( select u.id as uid, m.id as mid, u.fullname, m.starttime
from
team u
CROSS JOIN
meetings ) UxM
left join
register r
on UxM.uid = r.uid and UxM.mid = r.mid
ORDER BY
UxM.starttime ASC
如果這可以解決您的問題,請告訴我。
簡化:
SELECT
u.fullname,
u.id AS uid,
COALESCE(r.mark, '-') AS mark,
COALESCE(r.mid, '-') AS mid,
m.id,
m.starttime
FROM
team u
CROSS JOIN
meetings m
LEFT JOIN
register r
ON r.mid = m.id
AND r.id = u.uid
WHERE
u.hidden = 0
GROUP BY
m.id, u.id
ORDER BY
m.starttime, u.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.