我有两张 table
购买账单
id |customer_supplier |transaction_no
________________________________________
594 |99 | Y
636 |99 | Y
和purchase_bill_return
id |customer_supplier |transaction_no |p_id
______________________________________________
523 |99 | Y |536
624 |99 | Y |536
我希望通过以下方式输出表
id |pr_id
___________
594 |
636 |523
636 |624
我正在使用 SQL 查询:
SELECT pb.ID,
pr.ID
FROM PURCHASE_BILL pb
LEFT JOIN PURCHASE_BILL_RETURN pr
ON pb.ID = pr.PURCHASE_BILL_ID
AND pb.CUSTOMER_SUPPLIER_ID = pr.CUSTOMER_SUPPLIER_ID
WHERE pb.COMPANY_ID = 3
AND pr.COMPANY_ID = 3
AND pr.TRANSACTION_NO = 'Y'
AND pb.TRANSACTION_NO = 'Y'
AND pr.COSTOMER_SUPLIER_ID = 99;
但它只返回两个值:
id |pr_id
636 |523
636 |624
最佳答案
这是因为您将 where 子句中的过滤器应用于左连接外部的行。如果该行由于左连接而为空,则 WHERE pr.company_id = 3 将为假(pr.company_id 为空,而不是 3)。
将 pr 表上的所有条件移动到 LEFT JOIN 条件而不是 WHERE 子句中的条件(注意我实际上已经将 pr.company_id 加入到 pb.company_id 中,而不是将条件放在它们都是 3 中,只是确保 pb.company_id 是 3 并且 pr.company_id 匹配它):
select pb.id,pr.id
from purchase_bill pb left join purchase_bill_return pr on pb.id=pr.purchase_bill_id
and pb.customer_supplier_id=pr.customer_supplier_id and pr.company_id = pb.company_id
and pr.transaction_no = pb.transaction_no and pr.costomer_suplier_id=99
where pb.company_id =3 and pb.transaction_no = 'Y'
关于sql - 加入在表 sql 查询中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24722685/