Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
Mysql 从两个不同的表中获取公共数据_Mysql_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Mysql 从两个不同的表中获取公共数据

Mysql 从两个不同的表中获取公共数据,mysql,sql,sql-server,sql-server-2008,Mysql,Sql,Sql Server,Sql Server 2008,嗨,我有两个相同列名的表(Id、FName、LName、DOB、Type、Contact、Add) 现在我想将所有数据作为一个单独的行来获取,这两个表中的FName、LName和DOB都是按FName排序的 我尝试使用intersect和Union,但不为我工作 Select * from #t1 where FirstName in (select FirstName from #t2 ) and LastName in (select LastName from #t2 ) and D

嗨,我有两个相同列名的表(Id、FName、LName、DOB、Type、Contact、Add)

现在我想将所有数据作为一个单独的行来获取,这两个表中的FName、LName和DOB都是按FName排序的

我尝试使用intersect和Union,但不为我工作

  Select * from #t1 where FirstName in (select FirstName from #t2 ) and LastName in  (select LastName from #t2 ) and DateOfBirth in (select DateOfBirth from #t2 ) 
 UNION
Select * from #t2 where FirstName in (select FirstName from #t1 ) and LastName in  (select LastName from #t1 ) and DateOfBirth in (select DateOfBirth from #t1 )      order by FirstName ,LastName
谢谢这会有用的

Select a.*,b.* from #t1 a join #t2 b on (a.FName=b.FName and a.LName=b.LName and a.DOB=b.DOB)
这会奏效的

Select a.*,b.* from #t1 a join #t2 b on (a.FName=b.FName and a.LName=b.LName and a.DOB=b.DOB)

另一种方法是在
联合之后进行聚合。然后检查这些值出现的次数是否符合要求:

select firstname, lastname, dob
from ((select firstname, lastname, dob, 't1' as which
       from #t1
      ) union all
      (select firstname, lastname, dob, 't2' as which
       from #t2
      )
     ) t
group by firstname, lastname, dob
having count(distinct which) = 2;

另一种方法是在
联合之后进行聚合。然后检查这些值出现的次数是否符合要求:

select firstname, lastname, dob
from ((select firstname, lastname, dob, 't1' as which
       from #t1
      ) union all
      (select firstname, lastname, dob, 't2' as which
       from #t2
      )
     ) t
group by firstname, lastname, dob
having count(distinct which) = 2;
试试这个

SELECT T1.Id,
       T1.FName, 
       T1.LName,
       T1.DOB,
       T1.Type,
       T1.Contact,
       T1.Add
FROM #t1 T1 INNER JOIN #t2 T2
   ON  T1.FName=T2.FName
   AND T1.LName=T2.LName
   AND T1.dob=T2.dob
试试这个

SELECT T1.Id,
       T1.FName, 
       T1.LName,
       T1.DOB,
       T1.Type,
       T1.Contact,
       T1.Add
FROM #t1 T1 INNER JOIN #t2 T2
   ON  T1.FName=T2.FName
   AND T1.LName=T2.LName
   AND T1.dob=T2.dob

我想这样就可以了,但我相信有一种更简洁的方法

SELECT T1.*
FROM T1
INNER JOIN T2 
    ON T2.FirstName = T1.FirstName
    AND T2.LastName = T1.LastName
    AND T2.DateOfBirth = T1.DateOfBirth
UNION ALL
SELECT T2.*
FROM T2
INNER JOIN T1 
    ON T1.FirstName = T2.FirstName
    AND T1.LastName = T2.LastName
    AND T1.DateOfBirth = T2.DateOfBirth

我想这样就可以了,但我相信有一种更简洁的方法

SELECT T1.*
FROM T1
INNER JOIN T2 
    ON T2.FirstName = T1.FirstName
    AND T2.LastName = T1.LastName
    AND T2.DateOfBirth = T1.DateOfBirth
UNION ALL
SELECT T2.*
FROM T2
INNER JOIN T1 
    ON T1.FirstName = T2.FirstName
    AND T1.LastName = T2.LastName
    AND T1.DateOfBirth = T2.DateOfBirth


为什么不起作用?是什么让你这么说的?您知道,
UNION
自己执行
groupby
操作,对吗?如果您希望所有行无重复,请使用
UNION ALL
。在我的情况下,它不起作用,因为它检查T2的所有数据中的FirstName,Lastname和Dob都是相同的。好的,看起来在我完成键入之前,Nithesh已经提供了一个合适的答案。但是要小心标记多个DB平台-并非所有的语法在所有平台上都是通用的(尽管在这种情况下很好)。@Steve Pettifer:仍然没有得到正确的解决方案。请阅读我对Nilesh帖子的评论。为什么它不起作用?是什么让你这么说的?您知道,
UNION
自己执行
groupby
操作,对吗?如果您希望所有行无重复,请使用
UNION ALL
。在我的情况下,它不起作用,因为它检查T2的所有数据中的FirstName,Lastname和Dob都是相同的。好的,看起来在我完成键入之前,Nithesh已经提供了一个合适的答案。但是要小心标记多个DB平台-并非所有的语法在所有平台上都是通用的(尽管在这种情况下很好)。@Steve Pettifer:仍然没有得到正确的解决方案。请阅读我在Nilesh post上的评论。听起来与OP想要的最接近。如果contact、add和其他字段有不同的数据怎么办?问题是
只有相同的FName,LName和DOB
@user790454:现在你明白我的问题了。你说我想要两行数据,按FirstNames排序,最接近OP想要的,我想。如果contact、add和其他字段有不同的数据怎么办?问题是,
只有相同的FName,LName和DOB
@user790454:现在你明白我的问题了。你说我想要两行按名字排序的数据这个查询将公共数据显示为一行,但我想要从两个表中获取两个公共数据,我的意思是两个单独的行,具有其他类似列的类型,Contact and Add.Hi此查询将公共数据显示为一行,但我希望从两个表中都获取公共数据,我的意思是作为两个单独的行,具有其他类似列的类型,联系并添加。您好,您使用联接并将两个表中的公共数据合并为行,但我希望将此数据作为两行。您好,您使用联接并将两个表中的公共数据合并为行,但我希望将此数据作为两行。不用担心。我相信有一种更简洁的方法可以做到这一点,我只是想弄清楚那是什么!别担心。我相信有一种更简洁的方法可以做到这一点,我只是想弄清楚那是什么!