gpt4 book ai didi

mysql - 如何根据另一个表中的数据从一个表中选择数据

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

我有 2 个表:contracts_main_listcontracts_detail。在 Contracts_main_list 中我有几列:

user_id
contract_id

在contracts_detail中:

contract_id
other columns with data

我需要从表contracts_main_list WHERE user_id = some number中选择所有行。我需要从这些行中获取契约(Contract)编号列表(来自 contract_id 列),并根据它们从列表中选择与每个契约(Contract)编号相对应的行。所以类似:

WHERE contracts_detail.contract_id = contracts_main_list.contract_id

contract_id 可能是唯一的,但如果出现某种错误,并且任一表中都会有更多具有相同contract_id 的行,我只需要选择一行(因此可能使用 DISTINCT)并且选择最新记录(两个表都有列id作为主键)

此外,如果contracts_detail中没有行与第一个表contracts_main_list的contract_id匹配,它应该跳过该行。但我猜想条件是:

WHERE contracts_detail.contract_id = contracts_main_list.contract_id

已经覆盖了。

我希望我说得够清楚了。我在现实生活中想做的是显示契约(Contract)列表,其中包含属于用户的所有相关数据。

总而言之,我需要找到属于该用户的所有契约(Contract),并选择包含每个契约(Contract)详细信息的行,最后从contracts_detail表中获取数据。

最佳答案

这是您正在寻找的结果:

SELECT CD.*
FROM (SELECT C2.contract_id
,MAX(C2.id) AS last_main_list_id
,MAX(CD2.id) AS last_contracts_detail_id
FROM contracts_main_list C2
INNER JOIN contracts_detail CD2 ON CD2.contract_id = C2.contract_id
GROUP BY C2.contract_id) L
INNER JOIN contracts_main_list C ON C.id = L.last_main_list_id
AND C.user_id = ?
INNER JOIN contracts_detail CD ON CD.id= L.last_contracts_detail_id

由于您提供了以下指示,此查询使用 FROM 的子查询:

The contract_ids are probably gonna be unique, but in case there is some kind of error and there will be more rows with the same contract_id in either of the tables, I need to select only one row

如果您确定 contract_id 是唯一的,以下是相同的查询,但未对 contract_id 进行此检查:

SELECT CD.*
FROM contracts_main_list C
INNER JOIN contracts_detail CD ON CD.contract_id = C.contract_id
WHERE C.user_id = ?

希望这对您有帮助。

关于mysql - 如何根据另一个表中的数据从一个表中选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25834509/

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