mysql数据库,一张合同表,一张借据表,两张表是一对多的关系,编写SQL查出所有借据都为已付款的合同
时间: 2024-04-12 21:28:04 浏览: 119
你可以使用子查询和NOT EXISTS来编写SQL查询语句,以查出所有借据都为已付款的合同。假设合同表的名称为"contracts",借据表的名称为"receipts",且借据表中存储已付款状态的字段为"payment_status",可以尝试以下SQL查询语句:
```sql
SELECT contract_id
FROM contracts
WHERE NOT EXISTS (
SELECT *
FROM receipts
WHERE receipts.contract_id = contracts.contract_id
AND receipts.payment_status <> '已付款'
);
```
这条SQL语句使用了NOT EXISTS子查询来查找所有合同ID,在借据表中不存在未付款的记录。子查询选择与合同表相关联的借据记录,并且筛选出payment_status不是'已付款'的记录。外层的SELECT语句选择满足条件的合同ID。
请注意替换表名和字段名以适应你的实际情况。
相关问题
mysql数据库,一张合同表,一张借据表,两张表是一对多的关系,编写SQL查出每个合同中都为已付款的合同
可以使用INNER JOIN和GROUP BY来编写SQL查询语句,以查出每个合同中都为已付款的合同。假设合同表的名称为"contracts",借据表的名称为"receipts",且合同表中存储已付款状态的字段为"payment_status",可以尝试以下SQL查询语句:
```sql
SELECT contracts.contract_id
FROM contracts
INNER JOIN receipts ON contracts.contract_id = receipts.contract_id
WHERE receipts.payment_status = '已付款'
GROUP BY contracts.contract_id
HAVING COUNT(DISTINCT receipts.receipt_id) = (SELECT COUNT(*) FROM receipts WHERE contract_id = contracts.contract_id);
```
这条SQL语句使用了INNER JOIN将合同表和借据表连接起来,然后通过WHERE子句筛选出借据表中已付款的记录。接下来,使用GROUP BY对合同ID进行分组,并使用HAVING子句过滤只有与借据表中所有记录都匹配的合同。最后,SELECT语句选择出满足条件的合同ID。
请注意替换表名和字段名以适应你的实际情况。
阅读全文