gpt4 book ai didi

sql - 仅从 MySQL 连接返回唯一的表 ID

转载 作者:行者123 更新时间:2023-11-29 09:20:39 25 4
gpt4 key购买 nike

我有一个MySQL有两个表的数据库(针对这个问题进行了简化):
电影表列:idtitledurationdescriptioncreated_atupdated_at
Rentals 表列:idmovie_idstatuscreated_atupdated_at

租借状态为“已 checkout ”或“已退回”,因此,如果电影没有关联的租借,或者所有相关的租借状态均为“已退回”,则该电影可用。如何查询可用的电影?现在我得到了这个:

SELECT rentals.id,rentals.status,movies.* 
FROM `movies`
LEFT OUTER JOIN rentals ON movies.id = rentals.movie_id
AND movies.kiosk_id = rentals.kiosk_id
WHERE (`movies`.kiosk_id = 1
AND (rentals.id is null or rentals.status != 'CHECKED OUT'));

问题是,如果电影已被 check out 多次,则此查询会返回电影的多个记录,因此我的 ORM 给了我重复的电影对象。有没有什么方法可以指定我只想要唯一的movie.id?我应该有一些不同的数据库架构吗?或者我应该以编程方式对其进行排序(似乎太慢了)?

最佳答案

我不确定你想要的租赁 ID 是什么,所以我把它拿出来了。

SELECT
rentals.status, movies.*
FROM movies
LEFT OUTER JOIN (
SELECT
movie_id,
kiosk_id,
-- Because 'CHECKED OUT' comes alphabetically before 'RETURNED',
-- this will have 'CHECKED OUT' if there's at least one rental checked out
MIN(status) AS status
FROM rentals
GROUP BY movie_id, kiosk_id) rentals
ON movies.id = rentals.movie_id
AND movies.kiosk_id = rentals.kiosk_id
WHERE movies.kiosk_id = 1
AND (rentals.id is null or rentals.status != 'CHECKED OUT');

关于sql - 仅从 MySQL 连接返回唯一的表 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1934342/

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