我有一个"乘数"具有外键的表" push_id"指向"推动"中的记录表。这是一对多的关系。
有些推送记录不具有乘数,但其他人则有。我想要完成的是一个SQL查询,它选择具有乘数的最新推送记录,然后自己查询乘数。
类似的东西:
push_id = result_of("SELECT id FROM pushes ORDER BY ID DESC LIMIT 1 WHERE <multiplier record exists where push_id == id>")
multipliers = result_of("SELECT * FROM multipliers LIMIT 1 WHERE push_id == push_id")
print(multipliers)
我可能还想在推送上添加约束。因为我只想从某种类型的推动中获得乘数。
这里没有太多的SQL体验 - 任何帮助表示赞赏。 感谢。
我尝试过以下方法:
SELECT * from
(
select m.*, p.type,
from multipliers m
inner join pushes p
on m.push_id = p.id
where p.type = 'CONSTANT'
) AS res1 where res1.push_id = (
select max(push_id) from
(
select m.push_id
from res1
) AS res2
);
我收到此错误:
Error Code: 1146. Table 'res1' doesn't exist
答案 0 :(得分:1)
由于您只对链接到乘数的推送感兴趣,因此可以在表之间没有连接的情况下实现。基于您自己的尝试的以下查询演示了一般的想法:
select *
from multipliers
where push_id is not null and
push_id = ( select max(push_id)
from multipliers
)
如果您想通过push_type进行约束,假设您的模型已规范化以仅在推送表中包含该信息,那么您将需要一个连接,例如:
select m.*
from multipliers m
inner join pushes p
on m.push_id = p.id
where p.type = 'Whatever push type'
and m.push_id = (
select max(push_id)
from multipliers
);
编辑基于有问题的新要求,按push_type进行分区:
您可以使用嵌套成员资格测试扩展上一个查询,如下所示,以获得所需的结果
select m.*
from multipliers m
inner join pushes p
on m.push_id = p.id
where p.type = 'CONSTANT'
and m.push_id = (
select max(push_id)
from multipliers
where push_id in (
select push_id
from pushes
where type = 'CONSTANT'
)
);
或者使用从初始查询派生的更简单的查询:
select *
from multipliers
where push_id = (
select max(push_id)
from pushes
where push_type = 'CONSTANT'
)
答案 1 :(得分:0)
也许是这样的?
SELECT * FROM
multipliers INNER JOIN pushes
ON multipliers.push_id = pushes.push_id
ORDER BY multipliers.push_id DESC
LIMIT 1
INNER JOIN
可确保您选择multiplier
的{{1}}记录数据,其数据集按最大push
排序。
根据您的评论,有关&#34;推送类型&#34;的其他条件,您可以使用:
push_id
<小时/>
在更新您的问题后,您可能需要执行以下操作:
SELECT * FROM
multipliers INNER JOIN pushes
ON multipliers.push_id = pushes.push_id
WHERE pushes.type = 'X'
ORDER BY multipliers.push_id DESC
LIMIT 1