我有两张桌子 purchase_bill
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
答案 0 :(得分:1)
这是因为您将where子句中的过滤器应用于左连接外部的行。如果由于左连接而该行为空,则WHERE pr.company_id = 3将为false(pr.company_id为null,而不是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'
答案 1 :(得分:0)
选择pb.id,pr.id 来自purchase_bill pb left join buy_bill_return pr on pb.id = pr.purchase_bill_id 和pb.customer_supplier_id = pr.customer_supplier_id和pr.company_id = pb.company_id 和pr.transaction_no = pb.transaction_no 其中pb.company_id = 3和pb.transaction_no =' Y'和pr.costomer_suplier_id = 99