MySQL之從一個表中的兩個Id分別獲取另一個表中對應這兩個Id的名字

MySQL之從一個表中的兩個Id分別獲取另一個表中對應這兩個Id的名字。

我寫的MySQL之從一個表中的兩個Id分別獲取另一個表中對應這兩個Id的名字,供自己以後學習使用。

http://blog.sina.com.cn/s/blog_149e9d2ec0102voyy.html

簡介:

做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`

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章