![](/img/trans.png)
[英]SQL: I want to select all columns from table1 where columnA in table1 is equal to ColumnB in table2
[英]Select all columns from two tables grouping by all columns in table1 and specific column in table2
我的表結構如下
TblMemberInfo | TblCarInfo
MemberID Name | Id MemberId CarNumber
1 Sandeep | 1 2 1234
2 Vishal | 2 1 1111
3 John | 3 4 2458
4 Kevin | 4 2 1296
5 Devid | 5 4 7878
| 6 3 4859
我需要從TblMemberInfo,TblCarInfo查詢全選,其中Count(MemberId)= 1
MemberId Name CarNumber
1 Sandeep 1111
3 John 4859
這是一種方法:
select mi.MemberID, mi.Name, min(CarNumber) as CarNumber
from TblMemberInfo mi join
TblCarInfo ci
on mi.MemberID = ci.MemberID
group by mi.MemberID, mi.Name
having count(*) = 1;
之所以可行,是因為組中只有一行, min()
返回正確的值。
而且not exists
替代方法:
select mi.MemberID, mi.Name, ci.CarNumber
from TblMemberInfo mi join
TblCarInfo ci
on mi.MemberID = ci.MemberID
where not exists (select 1
from TblCarInfo ci2
where ci2.MemberID = ci.MemberID and ci2.id <> ci.id
);
還有更多選擇!
select mi.MemberId, mi.Name, ci.CarNumber
from TblMemberInfo mi
join TblCarInfo ci on
mi.MemberId = ci.MemberId
group by mi.MemberId, mi.Name, ci.CarNumber
having min(ci.Id) = max(ci.Id)
如果您還需要引入許多其他列,則使用子查詢來檢索單個MemberId's
是一個好主意。
select mi.MemberId, mi.Name, ci.CarNumber
from TblMemberInfo mi
join TblCarInfo ci on
mi.MemberId = ci.MemberId
where mi.MemberId in
(
select MemberId
from TblCarInfo
group by MemberId
having count(*) = 1
)
你會怎么辦授予這項任務? 可能:首先查找唯一的TblCarInfo成員條目,然后查找成員名稱。 因此,告訴DBMS完全這樣做:
select m.memberid, m.name, c.carnumber
from
(
select memberid, min(carnumber) as carnumber
from tblcarinfo
group by memberid
having count(*) = 1
) c
join tblmemberinfo m on m.memberid = c.memberid;
或相同的方法,但在select子句中使用子查詢而不是聯接:
select
c.memberid,
(select m.name from tblmemberinfo m where m.memberid = c.memberid) as name,
c.carnumber
from
(
select memberid, min(carnumber) as carnumber
from tblcarinfo
group by memberid
having count(*) = 1
) c;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.