如何解决停止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 举报,一经查实,本站将立刻删除。