gpt4 book ai didi

mysql - 在一个查询中从两个表中选择一条记录并从另一个表中选择多条记录

转载 作者:行者123 更新时间:2023-11-29 13:31:52 24 4
gpt4 key购买 nike

到目前为止我有 4 个表格(与这个问题相关); 图片摄影师模特picture_models

一张照片只能有 1 位摄影师,但可以有多个模特。在 pictures 表中有一个 photographer_id 列,该列也可以在 photographers 表中找到。

我想从 pictures 表中选择所有内容(具有特定的 pictures.picture_id),从 photographers 表中选择所有内容,然后选择每个内容已分配给 picture_models 中照片的模型。 picture_models 表如下所示;

   Table: picture_models
`picture_id` int(10) unsigned NOT NULL,
`model_id` int(10) unsigned NOT NULL

因此每张图片在picture_models中可以有多个记录。回到我的问题..是否可以以某种方式选择 models.* 以及图片信息和摄影师信息。截至目前,我的查询如下所示;

    SELECT p.*,
ph.*,
COUNT(pv.vote) vote_count,
SUM(pv.vote) vote_sum,
(SELECT COUNT(vote) FROM picture_votes WHERE vote > 0 AND picture_id = ?) plus_votes,
(SELECT COUNT(vote) FROM picture_votes WHERE vote < 0 AND picture_id = ?) minus_votes
FROM pictures p
LEFT JOIN picture_votes pv
ON pv.picture_id = p.picture_id
LEFT JOIN photographers ph
ON p.photographer_id = ph.photographer_id
WHERE p.authenticated = 1
AND
p.picture_id = ?

做我想做的事是没有意义/不可能的吗?只进行另一个查询以专门选择所有模型会更好吗?

最佳答案

你可以做这样的事情;您将获得每个模型的图片/投票数据的副本。这比执行两个单独的查询更有效,特别是在模型数量较少的情况下。

您可能需要将 ph.* 扩展为单独的列,因为如果没有它,内部查询中将会有两个 Photographer_id 列,这可能是不允许的。此外,许多数据库都希望 group by p.*, ph.* 包含内部查询中的所有列。不过,我认为 MySQL 会让你放弃它。

Select
p.*,
m.*
From (
Select
p.*,
ph.*,
count(pv.vote) vote_count,
sum(pv.vote) vote_sum,
sum(case when pv.vote > 0 Then 1 else 0 end) plus_votes,
sum(case when pv.vote < 0 then 1 else 0 end) minus_votes
From
pictures p
left join
picture_votes pv
On pv.picture_id = p.picture_id
left join
photographers ph
On p.photographer_id = ph.photographer_id
Where
p.authenticated = 1 And
p.picture_id = ?
) p
left join
picture_models m
On p.model_id = m.model_id

关于mysql - 在一个查询中从两个表中选择一条记录并从另一个表中选择多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19336378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com