2017-04-03 163 views
0

假設我有以下各表如何在MYSQL中加入具有相同實例的相同表?在MYSQL

Sailors (sid,sname,rating,age) where sid-> Sailor's id, 

Reserves (sid,bid,day) where bid-> boat's id 

我的查詢是: -

查找誰已經在同一天航行兩個不同的船水手的名字嗎?

首先,我嘗試加入保留表的兩個副本,並添加了一個條件,即出價必須不同。

SELECT * FROM reserves R1,reserves R2 WHERE R1.day = R2.day AND R1.bid <> R2.bid; 

我得到的輸出是這樣的: -

enter image description here

現在,查詢想要names of the sailors,因此對我有加盟水手錶這個結果表。


現在,我該如何應用連接(有什麼條件)的操作來獲得所需的結果?

+0

你的兩個表的模型描述是不完整的錯過。此外,加入r1和r2的查詢可能應該加入'... AND R1.bid> R2.bid',以避免在無序元組上重複。 – Sebas

+0

@ Sebas我應該提供表格的實例嗎? – Barry

+0

我的意思是,你的定義中似乎有些列缺失(例如儲備中的日子列)。我想我們需要他們加入的目的,否則我不明白你怎麼可以加入水手和儲備一起 – Sebas

回答

0
drop table if exists sailors; 
drop table if exists reserves; 

create table sailors(sid int, sname varchar(3)); 
create table reserves(bid int,sid int, dt date); 

insert into sailors values 
(1,'abc'),(2,'def'),(3,'ghi'); 
insert into reserves values 
(100,1,'2017-01-01'),(200,1,'2017-01-01'), 
(100,1,'2017-01-02'),(100,1,'2017-01-02'), 
(100,2,'2017-01-01'),(100,2,'2017-01-01'),(300,2,'2017-01-01'), 
(100,2,'2017-01-03'),(200,2,'2017-01-04') 
; 

select s.sid,t.sname,s.dt 
     ,group_concat(s.bid order by s.bid) boats 
from 
(
select r.sid,r.dt,r.bid, 
     if(concat(r.sid,r.dt,r.bid) <> @p, @rn:=1,@rn:[email protected]+1) rn,  
     @p:=concat(r.sid,r.dt,r.bid) p 
from (select @rn:=0,@p:='') rn,reserves r 
order by r.sid,r.dt,r.bid 
) s 
join sailors t on t.sid = s.sid 
where s.rn = 1 
group by s.sid,s.dt 
having instr(boats,',') > 0 

+------+-------+------------+---------+ 
| sid | sname | dt   | boats | 
+------+-------+------------+---------+ 
| 1 | abc | 2017-01-01 | 100,200 | 
| 2 | def | 2017-01-01 | 100,300 | 
+------+-------+------------+---------+ 
2 rows in set (0.00 sec) 
0

試試這個:

SELECT *,s.SName As SailorName 
FROM reserves R1 
INNER JOIN reserves R2 ON R1.day = R2.day AND R1.bid <> R2.bid 
INNER JOIN Sailors s ON R2.sid = s.sid 
0

你應該添加表海員類FROM條款和補充條件:兩列的表SID水手R1是相等的。

嘗試此查詢:

SELECT * 
FROM Reserves R1 
INNER JOIN Reserves R2 ON R1.sid=R2.sid AND R1.bid<R2.bid AND R1.date=R2.date 
INNER JOIN Sailors S ON R1.sid=S.sid 

我也有增加的必要條件:R1.sid = R2.sid您在查詢