gpt4 book ai didi

mysql - 3 个表之间的循环连接(或嵌套连接)

转载 作者:行者123 更新时间:2023-11-29 08:16:35 25 4
gpt4 key购买 nike

我有三个表,rents[id,contract_id,paid]contracts[id, active,unit_id]units[id].
我需要的是一个查询,该查询将选择所有已支付的租金并且其契约(Contract)处于事件状态,并将该单元加入到记录中。

我尝试过的是:

SELECT * FROM `rents` AS Rent
LEFT JOIN units AS Unit
INNER JOIN contracts AS Contract
ON (Unit.id = Contract.unit_id AND Contract.active=true)
ON Rent.unit_id = Unit.id
WHERE Rent.paid = true

返回的行很接近,我只收到了单位的已付租金 - 但是,它忽略了contract.active条件。

你能帮忙吗?

最佳答案

这里使用 SELECT * 时需要小心,因为不同字段有通用的字段名称 id。最好只列出您想要的实际字段:

SELECT
r.id AS `rent_id`,
c.id AS `contract_id`,
u.id AS `unit_id`
FROM rents AS r
INNER JOIN contracts AS c
ON r.contract_id = c.id
INNER JOIN units AS u
ON c.unit_id = u.id
WHERE r.paid = 'true'
AND c.active = 'true'

另请注意,我将 true 放在单引号中,因为我假设您在此字段中使用文本字符串。您实际上可能会考虑使用 tinyint 字段并将值设置为 1 作为 true 条件,在这种情况下,WHERE 子句将如下所示:

WHERE r.paid = 1
AND c.active = 1

注意,我已经使用了所有 INNER JOINS,因为您似乎不存在没有契约(Contract)就可以存在租金以及没有单位就可以存在契约(Contract)的情况。即使这是可能的,我也不认为它适用于您的查询,因为您专门寻找契约(Contract)和单位存在的情况。

关于mysql - 3 个表之间的循环连接(或嵌套连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20503466/

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