是否有一个好的或标准的SQL方法断言连接不会复制任何行(生成源表行的0或1个副本)?断言导致查询失败或以其他方式指示存在重复行。
许多查询中的一个常见问题是,当一个表与另一个表预期为1:1时,可能存在2个与连接条件匹配的行。这可能导致难以追踪的错误,特别是对于不一定完全熟悉表格的人。
似乎应该有一些简单而优雅的 - 这对于SQL引擎来说很容易检测(我已将这个源行加到另一个表中的一行了吗?好吧,错误)但我似乎无法找到任何东西。我知道这个问题存在长期/侵入性的解决方案,但对于许多即席查询来说,解决这些问题并不是很有趣。
编辑/澄清:我正在寻找一步一步的查询级修复。不是对该查询结果的验证步骤。
答案 0 :(得分:2)
如果您只是测试链接行而不是需要输出,那么您将使用EXISTS。
更准确地说,您需要“半连接”,但大多数RDBMS都不支持此操作,除非作为EXISTS
SELECT a.*
FROM TableA a
WHERE EXISTS (SELECT * FROM TableB b WHERE a.id = b.id)
另见:
答案 1 :(得分:1)
SELECT JoinField
FROM MyJoinTable
GROUP BY JoinField
HAVING COUNT(*) > 1
LIMIT 1
这很简单吗?没有Postgres,但我认为这是有效的语法。
答案 2 :(得分:1)
的内容
SELECT a.id, COUNT(b.id)
FROM TableA a
JOIN TableB b ON a.id = b.id
GROUP BY a.id
HAVING COUNT(b.id) > 1
应返回TableS中具有表中多个关联行的行。