【问题标题】:join not working in table sql query加入在表 sql 查询中不起作用
【发布时间】:2014-07-13 12:26:17
【问题描述】:

我有两张桌子 购买账单

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

【问题讨论】:

  • 检查您的查询,您使用的一半列在您的表示例中不存在。请提供与您的查询匹配的有效表结构。
  • 您是否尝试过删除左侧连接中的and b.customer_supplier_id=pr.customer_supplier_id

标签: sql postgresql grails grails-orm


【解决方案1】:

这是因为您将 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'

【讨论】:

  • 感谢您的帮助,但我更改了查询以获得所需的结果
  • 如果有帮助,别忘了投赞成票! :)
  • 我的积分还不到15,所以我不能放弃投票..对不起,我得到积分后会更新。
【解决方案2】:

选择 pb.id,pr.id 从purchase_bill pb left join purchase_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

【讨论】:

    猜你喜欢
    • 2017-12-01
    • 2014-03-22
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    相关资源
    最近更新 更多