繁体   English   中英

如何编写一个查询,在 sql 中连接同一个表并将一个表的列值与另一个表中的相同列进行比较

[英]How to write a query that joins same table in sql and compares the column values of one table with same column in another table

编写一个查询来检查流量不一致。 不一致是指访问(url、uid、dt、src、rev)涉及用户 uid 从未访问过的源页面 src。 返回访问的key(url、uid、dt)。

这是我正在使用的表:

访问表的主键是url、uid、dt。

访问:

网址 dt 用户界面 源文件
A02 05/18/2003 一种 A05 20
A03 05/19/2003 A01 15
A01 2004 年 5 月 20 日 A02 10

我希望它返回这些结果:

网址 dt 用户界面 源文件
A02 05/18/2003 一种 A05 20
A01 05/20/2004 A02 10

这是因为作为 A02 源的 A05 从未被 uid 访问过。 A03 访问不会被返回,因为源之前被 B 访问过。

我将如何编写返回此内容的查询?

首先,我确实尝试在 src 和 url 上通过 self Join 将两个 Visit 表连接在一起:

Select distinct V1.url, V1.uid
FROM Visit V1, Visit V2
WHERE V1.src = V2.url

但我不确定从这里去哪里。 我知道可能需要那个组。

NOT EXISTS有助于查找这些记录。

SELECT *
FROM Visit a
WHERE NOT EXISTS (
  SELECT 1
  FROM Visit b
  WHERE b.url = a.src 
  AND b.uid = a.uid
)

我来自同一个班级,只是想说我认为他希望我们只返回 URL、uid 和 dt。 因此,如果您将 SELECT * 更改为 SELECT asdlkfj;lasjdflk 无论什么 tf,您都应该是金色的......除非我误解了哈哈

另外,我们是否也应该制作 select 语句 DISTINCT 或者rr nah?

嘿,我来自同一个班级,只是想说我认为他希望我们只返回 URL、uid 和 dt。 因此,如果您将 SELECT * 更改为 SELECT asdlkfj;lasjdflk 无论什么 tf,您都应该是金色的......除非我误解了哈哈

另外,我们是否也应该制作 select 语句 DISTINCT 或者rr nah?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM