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

标签 mysql join circular-dependency nested

我有三个表,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/

相关文章:

php - Zend Framework DB Complex Where 或条件

MySQL 加入子查询

mysql - 根据特定列值连接两个表

c++ - 另一个 header 循环依赖

c++ - 惰性符号绑定(bind)失败 : symbol not found

spring xml文件和导入xml文件循环依赖

mysql - 带有空值的 sql 插入在本地主机上工作,而不是实时工作

java - 如何检索数据库中一列字段中的多个数据并将其逐个显示到输入字段中

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源

MySQL 对多个 JOINS 使用 GROUP_CONCAT