sql中多个select语句的联接结果

sql中多个select语句的联接结果,sql,sql-server,select,join,intersect,Sql,Sql Server,Select,Join,Intersect,我有四个select语句,我想把它们全部连接起来,只得到公共行 在一个示例中,我提供了两个select语句: SELECT h.userid, 'Activity' as table_name, h.stamp, DATEDIFF(dd, kh.LatestDate, GETDATE()) as days_since, m.group_name FROM ([Animal].[SYSADM].[activity_history] h INNER

我有四个select语句,我想把它们全部连接起来,只得到公共行

在一个示例中,我提供了两个select语句:

SELECT 
    h.userid, 'Activity' as table_name, 
    h.stamp, 
    DATEDIFF(dd, kh.LatestDate, GETDATE()) as days_since, 
    m.group_name
FROM 
    ([Animal].[SYSADM].[activity_history] h
INNER JOIN 
    (SELECT userid, MAX(stamp) as LatestDate
     FROM [Animal].[SYSADM].[activity_history]
     GROUP BY userid) kh ON h.userid = kh.userid AND h.stamp = kh.LatestDate)  
LEFT OUTER JOIN 
    [Animal].[SYSADM].secure_member m ON m.user_name = h.userid
WHERE 
    (DATEDIFF(dd, kh.LatestDate, GETDATE()) > 90)
    AND NOT (m.group_name = 'inactive')
ORDER BY 
    userid

SELECT 
    h.userid, 'Person' as table_name, h.stamp, 
    DATEDIFF(dd, kh.LatestDate, GETDATE()) as days_since, 
    m.group_name
FROM 
    ([Animal].[SYSADM].[person_history] h
INNER JOIN 
    (SELECT userid, max(stamp) as LatestDate
     FROM [Animal].[SYSADM].[person_history]
     GROUP BY userid) kh ON h.userid = kh.userid AND h.stamp = kh.LatestDate)  
LEFT OUTER JOIN 
    [Animal].[SYSADM].secure_member m ON m.user_name = h.userid
WHERE 
    (DATEDIFF(dd, kh.LatestDate, GETDATE()) > 90)
    AND NOT (m.group_name = 'inactive')
ORDER BY 
    userid
我尝试了
INTERSECT
,但它没有返回任何行,我想查看两个select语句中的公用行(实际上我有4行,所以我相信对2有效的语句对4有效)

提前谢谢

更新:

我在2条select语句上尝试了内部连接,它给了我想要的结果,但现在的问题是如何在4条select语句上使用内部连接

SELECT DISTINCT t1.userid as A_UserID, t2.userid as P_UserID, t1.stamp as A_stamp, t2.stamp as P_stamp, datediff(dd,t1.stamp,GetDate()) as A_days_since, datediff(dd,t2.stamp,GetDate()) as P_days_since, t1.group_name, t1.table_name, t2.table_name
from 
    (SELECT h.userid, 'Activity' as table_name, h.stamp, datediff(dd,kh.LatestDate,GetDate()) as days_since, m.group_name
  FROM 
 ( [Animal].[SYSADM].[activity_history] h
inner join (
    select userid, max(stamp) as LatestDate
  from [Animal].[SYSADM].[activity_history]
  group by userid
  ) kh on h.userid = kh.userid and h.stamp = kh.LatestDate
  )  
left outer join [Animal].[SYSADM].secure_member m on m.user_name = h.userid
where 
(datediff(dd,kh.LatestDate, GetDate()) > 90)
and not (m.group_name = 'inactive')) t1

inner join

    (SELECT h.userid, 'Person' as table_name, h.stamp, datediff(dd,kh.LatestDate,GetDate()) as days_since, m.group_name
  FROM 
 ( [Animal].[SYSADM].[person_history] h
inner join (
    select userid, max(stamp) as LatestDate
  from [Animal].[SYSADM].[person_history]
  group by userid
  ) kh on h.userid = kh.userid and h.stamp = kh.LatestDate
  )  
left outer join [Animal].[SYSADM].secure_member m on m.user_name = h.userid
where 
(datediff(dd,kh.LatestDate, GetDate()) > 90)
and not (m.group_name = 'inactive')) t2
on
    t1.userid = t2.userid
    order by T1.userid

暂时忘掉工会吧。想象一下,您获取该结果并将其插入
表1

那就看“普通行”是什么意思了。如果您想要精确的值,但在不同的表中

  SELECT userid, h.stamp, days_since, m.group_name
  FROM Table1
  GROUP BY userid, h.stamp, days_since, m.group_name
  HAVING COUNT( table_name ) = 2 -- in this case 2 because are two types 
                                 -- Activity and Persons

查看查询结果后,您还需要将
DISTINCT
添加到
UNION

上的每个查询中,这是用于哪个RDBMS的?请添加一个标记,以指定您使用的是
mysql
postgresql
sql server
oracle
db2
-还是其他完全相同的东西。请确定我将更新我的标记,它适用于sql Server在查看查询结果后将表和数据以文本形式发布您还需要在
联合
上的每个查询中添加
DISTINCT
。感谢您的帮助,实际上,我刚刚尝试了使用两条select语句进行内部连接,它给了我想要的结果,但现在我正在考虑使用其余的两条select语句。正如我所说的,
UNION
部分是不相关的。只需将2更改为4行,从普通行中,我指的是由第1、第2、第3和第4个select语句返回的相同行。我只想忽略在所有4个结果集中不可用的行,只想保留在所有4个结果集中可用的行。希望这会有帮助是的,看起来我就是这么做的