【问题标题】:SQL Server : join on array of ID's from previous joinSQL Server:加入来自先前加入的 ID 数组
【发布时间】:2015-09-29 03:17:56
【问题描述】:

我有 2 张桌子。一个已被修剪以仅显示符合某些标准的 ID。第二个需要修剪以仅显示与前一个 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...

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

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

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 中,我将使用数组比较或只运行另一个查询...任何帮助将不胜感激。

【问题讨论】:

    标签: sql sql-server


    【解决方案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);
    

    【讨论】:

    • 我打错了。 “应用程序”确实采用 [t2.user_id] 并根据用户操作将其插入 [meeting_party_id]。我现在正在尝试您的解决方案...
    • 哦,是的。那成功了。你我的男人真棒。我欠你一个披萨。我知道我现在做错了什么,我没有正确包装/嵌套。非常感谢!
    猜你喜欢
    • 2012-10-28
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多