我有一张table transaction
还有一张table transaction_item
.
一个事务有多个事务项。
我想离开加入 transaction_item
如果 transaction_item.amount >= 2
,否则不执行连接。
select ti.*
from transaction t
LEFT JOIN transaction_item ti on ti.unique_id = t.unique_id
AND ti.location_id = t.location_id
AND ti.transaction_date = t.transaction_date
AND ti.amount >= 2
where t.pos_transaction_id = 4220
and t.location_id = 1674
and t.transaction_date = '2020-05-08';
如果我这样做的话,结果是15行,而不是总共20行,因为20行在 transaction_item
对应表 transaction_id
4220但我不想加入这个案子因为有5行 transaction_item
有 amount < 2
.
1条答案
按热度按时间kmb7vmvb1#
你的描述有点混乱,但标题说:
“否则不执行联接”
所以我想你想要这样的东西:
然而
LEFT JOIN
仅与SELECT
这个名单充其量是可疑的。这样就得到一行,其中的每一行都有空值transaction
符合条件且中没有匹配行的transaction_item
或一个或多个匹配行amount < 2
. 我怀疑你想要那个。通常,您需要包含
transaction
在SELECT
列出,或使用[INNER] JOIN
相反。所以可能是:
再来一张table
transaction_item
通常会有一个fk列transaction_id
引用transaction
-在这种情况下我们可以简化你两个都提到了
pos_transaction_id
以及transaction_id
,所以我猜。。。从中获得的主要见解是:对于任何此类问题,始终显示精确的表定义。