为什么我的 SQL WHERE 子句没有受到尊重?

Why isn't my SQL WHERE clause being respected?

SELECT * FROM "transaction"
WHERE type = {transaction_type} AND 
(from_member_id AND to_member_id) IN (SELECT member_id FROM org WHERE org_member = {org.id})

我发现我检查 from_member_id 和 to_member_id 是否在我想要的组织中的子句实际上没有得到尊重。

为清楚起见;我想 select 同一组织成员之间的所有交易。

此外,我希望我的联盟也能正常工作(因为成员与 org_member 中引用的成员相同)

SELECT * FROM "transaction"
INNER JOIN member ON "transaction.member_id" = member.id
WHERE type = {transaction_type} AND 
("transaction.from_member_id" AND "transaction.to_member_id") IN (SELECT member_id FROM org WHERE org_member = {org.id})

如有任何帮助,我们将不胜感激。

此外,注意:我在 python 中插入字符串时的 {} 语法,因此请忽略。

表达式中:

(from_member_id AND to_member_id) IN (...)

第一部分将被视为具有可能值 1、0 和 null 的布尔表达式。所以它不会产生预期的结果。

你需要分别检查它们:

AND transaction.from_member_id IN (SELECT member_id FROM org WHERE org_member = {org.id})
AND transaction.to_member_id   IN (SELECT member_id FROM org WHERE org_member = {org.id})