检查外表中id是否存在两次


Check if id exists in foreign table twice

在尝试了一段时间后,我想我应该试着在这里要求改变。
我试图检查一个人的id是否存在于两个表中,对于一个表,它像一个魅力,但如果我试图检查另一个表,我得到以下错误:

[语义错误]line 0, col 268 near 'owner FROM '…'Entity'Resource':
错误:无效的patheexpression。必须是一个StateFieldPathExpression

诀窍是,我只能使用一个DQL查询,以下是我想到的(…)不在实际查询中):

SELECT contact_person
FROM ''...'Entity'Person contact_person
WHERE NOT EXISTS (SELECT b.personId FROM ''...'Entity'Booking b WHERE b.personId = contact_person.id)
AND NOT EXISTS (SELECT r.owner FROM ''...'Entity'Resource r WHERE r.owner = contact_person.id)

您的查询不是最简单的。你应该化简它。如果你想选择所有没有同时出现在订票表和资源表中的人员,你应该使用这个查询:

SELECT contact_person.*
FROM Person contact_person
LEFT JOIN Booking b  ON contact_person.id = b.personId
LEFT JOIN Resource r ON contact_person.id = r.owner
GROUP BY contact_person.id
HAVING COUNT(r.owner) = 0 AND COUNT(b.personId) = 0

连接比每一行的子查询要快得多。这个查询更清楚。

p。对不起,我不懂DQL方言,但我认为你可以根据你的需要修改我的查询。

我最终使用子查询解决了这个问题。连接可能要快得多,但我忘记了它们。(他们让我在DQL上非常头疼)

无论如何,我解决它的方法是这样的:

SELECT contact_person
FROM ...
WHERE (SELECT COUNT(b.personId) FROM ''...'Entity'Booking b WHERE b.personId=contact_person.id)=0
AND (SELECT COUNT...)=0

请注意,我的代码不需要实时运行,所以比起性能,我更关心易用性。(我喜欢子查询,因为它们清楚地分离了不同的规则,我想其他人可能更喜欢连接,也有很好的理由,仅次于性能)。