我致力于建立一个15世纪末大西洋商人的数据库。我写这个查询是为了找到相同合同中的个人关系。它工作得很好,但它会产生重复的结果,例如a、 “b,01-01-1500”和“b,a,01-01-1500”。对我来说,这是一个问题,因为我在这一点上没有考虑方向性。我试着简单地过滤结果,但它产生了一个更重要的问题,因为它只留下了一个结果,不管关联发生在不同的日期或不同的合同(这可能是我的错,过滤是我仍在学习的东西)
怎样才能避免这个问题?
SELECT d1.gen_id as 'source',
d2.gen_id as 'target',
c.date as 'timestamp'
from (
Select * from deed_party1
) as d1
INNER JOIN
(
select * from deed_party1
) as d2
on d1.deed_id = d2.deed_id
inner join contracts as c
on d1.deed_id = c.id
where d1.gen_id != d2.gen_id AND c.date between '1500-01-01' AND '1509-12-31';
谢谢你的阅读和帮助,
1条答案
按热度按时间hgb9j2n61#
你只是想
<
而不是!=
. 但子查询不是必需的,因此:也:
不要不必要地使用子查询。在大多数数据库中,这只是不必要地混乱了查询。mysql倾向于具体化子查询,因此子查询也会对性能产生(负面)影响。
不要使用单引号分隔列名。单引号只能用于字符串和日期常量。
如果必须转义列名,请使用反勾号。
不要选择已经被sql使用的名称,例如
timestamp
. 这在mysql中是安全的,但只是一种不好的做法。