sql中多个select语句的联接结果
我有四个select语句,我想把它们全部连接起来,只得到公共行 在一个示例中,我提供了两个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
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个结果集中可用的行。希望这会有帮助是的,看起来我就是这么做的