MySQL之從一個表中的兩個Id分別獲取另一個表中對應這兩個Id的名字。
我寫的MySQL之從一個表中的兩個Id分別獲取另一個表中對應這兩個Id的名字,供自己以後學習使用。
簡介:
做MySQL的查詢時遇到一個相當頭大的問題,就是通過notice數據庫中senderId和recipientId獲取user數據庫中對應的兩個名字,並且在一行顯示,注意不是在一個字段中顯示(注:在一個字段中顯示可以用group_concat()函數實現)。
經過大神的指教我終於解決了這樣的問題,對這位大神表示真誠的感謝。以下是詳情:
1. 首先數據表notice:
create table if not exists notice(
noticeId int(11) NOT NULL AUTO_INCREMENT COMMENT '自增通知ID',
senderId int(11) NOT NULL COMMENT '發送人ID,發送人可以是每個員工',
sendDateTime datetime not null COMMENT '通知發送時間',
noticeTitle varchar(255) COMMENT'通知標題',
noticeContent text COMMENT '發送內容',
deadLine date COMMENT '通知截止日期',
noticeState int(1) COMMENT'通知狀態, 0:未查看,1:已查看,2 :未過期,3:已過期,,4:確認查看',
receptOfficeId int(11) COMMENT '接受科室ID',
recipientId int(11) COMMENT '接收人ID,接收人可以是單位中的任何一個員工',
receptDateTime datetime COMMENT '接受通知時間',
primary key(noticeId)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
2. 插入一條數據爲:
insert intonotice(senderId,sendDateTime,noticeTitle,sendContent,recipientId)
values(11,now(),'吃飽了','吃飽不餓,天天快樂。',13)
3. 有另一個數據表user
create table if not exists user(
userid int(11),
realName varchar(10)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
4. 插入數據:
insert into user(userid,realName)values(11,'宋騰飛'),('13','王福棟');
5. 想要的結果
senderId realname aa bb
11 宋騰飛 13 王福棟
6. MySQL代碼
SELECT a.senderId
,b.realname
,aa.recipientId
,aa.realname
FROM notice a
INNER JOIN USER b
ON b.userid=a.senderId
LEFT JOIN (SELECTa.recipientId
,b.realname
,a.`noticeId`
FROM notice a
INNER JOIN USER b
ON b.userid=a.recipientId) aa
ON aa.`noticeId`=a.`noticeId`