Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从按表1中的所有列和表2中的特定列分组的两个表中选择所有列_Sql_Sql Server - Fatal编程技术网

Sql 从按表1中的所有列和表2中的特定列分组的两个表中选择所有列

Sql 从按表1中的所有列和表2中的特定列分组的两个表中选择所有列,sql,sql-server,Sql,Sql Server,我的桌子结构如下所示 TblMemberInfo | TblCarInfo MemberID Name | Id MemberId CarNumber 1 Sandeep | 1 2 1234 2 Vishal | 2 1

我的桌子结构如下所示

    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中查询select all,其中CountMemberId=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返回正确的值

不存在替代方法使用:

还有几个选择

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是一个好主意

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子句中使用子查询而不是join:

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;
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;