【发布时间】:2017-10-26 12:55:17
【问题描述】:
我正在使用MySQL 查询从 2 个表中获取数据。在这里,我在 table2 中有一个状态 Transfer Out。我确实需要获取状态为Transfer Out 的所有详细信息,同时,在Transfer Out 之后添加的Transfer In 状态不应该有任何详细信息。 这样我就不应该在Transfer Out 之后得到Transfer back In 的详细信息。
现在我正在使用subquery。但是当数据计数变高时,就会导致超时问题。有没有更好的方法来重写查询并获得相同的结果?
我的查询示例是
SELECT sq.etid
FROM (
SELECT og.etid, pt.timestamp
FROM og_membership og
INNER JOIN table1 n ON(n.nid=og.etid)
INNER JOIN table2 pt ON(og.etid=pt.animal_nid)
WHERE og.entity_type='node'
AND pt.partner_gid = :gid
AND pt.shelter_gid = :our_gid
AND pt.type = 'Transfer Out'
AND (
SELECT count(id)
FROM table2
WHERE timestamp > pt.timestamp
AND type = 'Transfer In'
AND partner_gid = :gid
AND shelter_gid = :our_gid
) = 0
) AS sq
【问题讨论】:
-
这不就是说最后一笔交易在哪里“转出”,或者转出后是否还有转入以外的交易?
-
"来自 2 个表" -- 看起来像 3 个表!
标签: mysql subquery query-optimization