构建 SQL 连接的麻烦
Posted
技术标签:
【中文标题】构建 SQL 连接的麻烦【英文标题】:Trouble to build a SQL join 【发布时间】:2017-08-16 18:16:16 【问题描述】:我想检查表“T2”的 3 个字段的值是否针对表“T1”中的每个用户一起出现,连接如下:
]1
预期结果:
这可能吗?如果是,您能帮忙建立一个查询吗?
谢谢
Link to the MS access file:
【问题讨论】:
T1 中有用户字段吗? 不,T1 中的每条记录都代表不同系统权限的组合,不应将这些权限一起授予同一用户。因此,在 T2 中,我拥有所有用户及其所有权限,并且我试图确定谁拥有 forbidden 组合。 T1 中的行有何不同?是否还有其他字段指示器未显示? 如果您开始查询并将其发布以获取帮助以使其正常工作,您将获得更多帮助。我不确定 msaccess 语法,但在 TSQL 中,我会考虑 T1 的轴心并加入 R 字段。然后对按用户分组的结果进行计数,其中计数 = T1 的最大计数(在本例中为 3)这些是您正在寻找的“禁止”记录。 @Parfait,T1(图片右侧)会有一个唯一的组合,由数字代码表示的3种不同的访问,所以如果我们以第一行为例,访问0001 +的组合0002 + 0003 不应该发生。然后在 T2(图像左侧)中,“用户 1* 有 3 次访问,它们恰好与 T1 中的第一条记录完全相同。我想到了这样的事情:SELECT * FROM T1 INNER JOIN T2 ON (T1.R3 = T2.R) 与 (T1.R2 = T2.R) 与 (T1.R1 = T2.R); 【参考方案1】:基于发布示例的假设:只有 3 个因子和因子可以在 T1 的任何字段中。
每个表都需要一个唯一的标识符字段,应该提供一个自动编号。
查询:T1_UNION(必须在查询生成器的 SQLView 中键入(或复制/粘贴)UNION 查询。)SELECT RecID_T1, "R1" AS Cat, R1 AS Data FROM T1
UNION SELECT RecID_T1, "R2", R2 FROM T1
UNION SELECT RecID_T1, "R3", R3 FROM T1;
查询:T2_CROSSTABTRANSFORM First(T2.R) AS FirstOfR
SELECT T2.U
FROM T2
GROUP BY T2.U
PIVOT DCount("*","T2","U='" & [U] & "' AND RecID_T2<" & [RecID_T2])+1;
查询:SELECT T2_CROSSTAB.U, DLookUp("Data","T1_UNION","Data='" & [1] & "'") AS IsMatch1, DLookUp("Data","T1_UNION","Data='" & [2] & "'") AS IsMatch2, DLookUp("Data","T1_UNION","Data='" & [3] & "'") AS IsMatch3
FROM T2_CROSSTAB
WHERE ((Not (DLookUp("Data","T1_UNION","Data='" & [1] & "'")) Is Null) AND (Not (DLookUp("Data","T1_UNION","Data='" & [2] & "'")) Is Null) AND (Not (DLookUp("Data","T1_UNION","Data='" & [3] & "'")) Is Null));
使用 Joe C 的想法,不需要 CROSSTAB。
查询:Data_GROUPEDSELECT T2.U, T2.R
FROM T2 INNER JOIN T1_UNION ON T2.R = T1_UNION.Data
GROUP BY T2.U, T2.R
ORDER BY T2.U;
查询:SELECT Data_GROUPED.U, Count(Data_GROUPED.R) AS CountOfR
FROM Data_GROUPED
GROUP BY Data_GROUPED.U
HAVING (((Count(Data_GROUPED.R))=3));
【讨论】:
谢谢,但 MS Access 似乎不支持这些操作。我已使用文件链接或预期结果的另一个屏幕截图编辑了主题。 我在 MS Access 中构建了表和查询 - 一切正常。必须在查询生成器的 SQLView 中键入(或复制/粘贴)UNION 查询。请参阅我编辑的答案,更改为两种方法都需要唯一 ID。 太棒了!我可以在那里完成表格,非常感谢!以上是关于构建 SQL 连接的麻烦的主要内容,如果未能解决你的问题,请参考以下文章
kylin2.3版本启用jdbc数据源(可以直接通过sql生成hive表,省去手动导数据到hive,并建hive表的麻烦)