微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

停止SQL在JOIN中两次返回相同的结果

如何解决停止SQL在JOIN中两次返回相同的结果

不要使用20年过期的语法。尽管许多RDBMS支持FROM a, b, c样式语法,但我使用过的所有系统均已弃用该语法。(我还没有处理所有事情,但是强烈建议不要使用这种样式。)

而是使用ansi-92标准JOIN语法。那就更难把事情弄错了…

SELECT
  *
FROM
  status S
INNER JOIN
  tracks T
    ON T.ID = S.ID
INNER JOIN
  events E
    ON E.ID = S.ID
ORDER BY
  E.timestamp DESC

此外,您的示例数据还建议您在表S中具有以下内容

 Status | ID
--------+----
 hello  | 4
 bye    | 3
 more   | 4

ID = 4有两排。如果您确实希望T中的每一行仅连接S中的一行,那么您应该选择哪一行?应该删除一个,还是还有其他逻辑/条件可以用来选择两者之一?

解决方法

我已经联合了几个表来获取我想要的数据,但是由于我是SQL的新手,所以我不知道如何停止多次返回数据。

她是SQL语句;

SELECT
   T.url,T.ID,S.status,S.ID,E.action,E.ID,E.timestamp

FROM tracks T,status S,events E
WHERE S.ID AND T.ID = E.ID

ORDER BY E.timestamp DESC

返回的数据是这样的:

+----------------------------------------------------------------+
| URL | ID | Status | ID | action               | ID | timestamp |
+----------------------------------------------------------------+
| T.1 | 4  | hello  | 4  | has uploaded a track | 4  | time      |
| T.2 | 3  | bye    | 3  | has some news        | 3  | time      |
| t.1 | 4  | more   | 4  | has some news        | 4  | time      |
+----------------------------------------------------------------+

这是一个非常基本的示例,但它概述了发生的情况。如果您查看第三行,则在状态不同时,URL会重复。

这就是我想发生的事情;

+-------------------------------------------------------+
| URL or Status | ID | action               | timestamp |
+-------------------------------------------------------+
| T.1           | 4  | has uploaded a track | time      |
| hello         | 3  | has some news        | time      |
| bye           | 4  | has some news        | time      |
+-------------------------------------------------------+

请注意,该动作已上传曲目时,将显示url(本例中为T.1)。这个非常重要。事件表中的操作是在状态或音轨插入触发时插入的。如果插入了新轨道,则操作是“已上载轨道”,并且您猜测状态是什么。此时,ID和时间戳也已插入到事件表中。

注意:查询中 有更多表,实际上还有3个表,但为简单起见,我将其省略。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。