SQL Server:从先前的连接加入ID的数组

时间:2015-09-29 03:17:56

标签: sql sql-server

我有2张桌子。一个人已被修剪,只显示符合某些标准的ID。第二个需要修剪,只显示与前一个"数组匹配的数据"我的。可以有多个结果。 请考虑以下事项:

Query_1_final :返回符合特定条件的用户的ID:

select 
    t1.[user_id]
from 
    [SQLDB].[db].[meeting_parties] as t1
inner join
    (select distinct 
         [user_id]
     from 
         [SQLDB].[db].[meeting_parties]
     group by 
         [user_id]
     having 
         count([user_id]) = 1) as t2 on t1.user_id = t2.user_id
where 
    [type] = 'organiser'

这很好用并且返回:

user_id 
--------------------
22
1255
9821
  and so on...

它会生成一个列,其中包含每个人的ID,会议组织者"以及active_meetings表中。 (注意,有多种类型/角色,这是抓住它们的最佳方式)

现在,我需要这些数据来过滤另一个表,另一个连接。这是我的查询的开始

Query_2_PREP :返回会议有"开始"的5列已经

SELECT 
    [meeting_id]
    ,[meeting_style]
    ,[meeting_day]
    ,[address]
    ,[promos]
FROM 
    [SQLDB].[db].[all_meetings]
WHERE 
    [meeting_started] = 'TRUE'

这也适用

meeting_id | meeting_style | meeting_day ...
---------------------------------------------
23          open             M,F,SA
23          discussion       TU,TH
23          lead             W,F
  and so on...

并返回已开始的所有10,982个会议,但我需要它只返回来自Query_1_final的不同组织者ID的会议(应该更多)喜欢1200条记录)

理想情况下,我需要一些东西"喜欢"以下(但当然不起作用)

查询2 :需要返回仅来自管理单位ID的所有会议。

SELECT 
    [meeting_party_id]
    ,[meeting_style]
    ,[meeting_day]
    ,[address]
    ,[promos]
FROM 
    [SQLDB].[db].[all_meetings]
WHERE 
    [meeting_started] = 'TRUE'
    AND [meeting_party_id] = "ANY Query_1_final results, especially multiple"

我已经尝试过嵌套JOIN和INNER JOIN,但我认为这里有一些关于SQL的基本内容。在PHP中我会使用数组比较或只是运行另一个查询...任何帮助将非常感激。

1 个答案:

答案 0 :(得分:1)

只需使用IN即可。这是逻辑的结构:

with q1 as (
      <first query here>
     )
SELECT m.*
 FROM [SQLDB].[db].[all_meetings] m
WHERE meeting_started = 'TRUE' AND
      meeting_party_id IN (SELECT user_id FROM q1);