2016-09-17 100 views
0

我無法將在下面的查詢別名is_paidis_overdueis_outstanding條件:在MySQL查詢上的IF別名添加WHERE條件

SELECT r.doc_number, 
     r.doc_date, 
     r.due_date, 
     r.currency, 
     r.amount, 
     r.vat, 
     r.vatammount, 
     (r.amount + r.vatammount) final_amount, 
     r.currency, 
     b.boq_id, 
     b.boq_comp_id, 
     b.boq_client_id, 
     b.boq_agency, 
     b.boq_date, 
     b.boq_orders, 
     b.receivable_id, 
     c.comp_name, 
     crm.`cn-name-first`, 
     crm.`cn-name-last`, 
     bi.inv_path, 

    (SELECT SUM(amount_recieved) 
    FROM receivables_payments 
    WHERE r_id = b.receivable_id) total_amount_received, 
     IF (r.amount + r.vatammount = 
      (SELECT SUM(amount_recieved) 
       FROM receivables_payments 
       WHERE r_id = b.receivable_id), 
      '1', 
      '0') AS is_paid, 
      IF (CURRENT_DATE >= r.due_date 
       AND r.amount + r.vatammount != 
       (SELECT SUM(amount_recieved) 
       FROM receivables_payments 
       WHERE r_id = b.receivable_id), 
        '1', 
        '0') AS is_overdue, 
      IF (r.due_date < CURRENT_DATE 
       AND r.amount + r.vatammount != 
        (SELECT SUM(amount_recieved) 
        FROM receivables_payments 
        WHERE r_id = b.receivable_id), 
        '1', 
        '0') AS is_outstanding 
FROM receivables r 
LEFT JOIN boq b ON b.receivable_id = r.id 
LEFT JOIN boq_invoices bi ON bi.inv_boq_id = b.boq_id 
LEFT JOIN comp_companies c ON c.comp_id = b.boq_comp_id 
LEFT JOIN crm_contacts crm ON crm.contact_id = b.boq_client_id 
WHERE r.status = 'active' 
    AND r.doc_type = 'inv' 
    AND b.boq_status = 'active' 
    AND is_paid = '1' 
ORDER BY r.doc_date DESC LIMIT 10 

有什麼辦法來修改這個查詢並且可以在這三個別名上添加一個條件?

回答

1

在不允許的情況下使用別名。因爲不。是的不可能性查詢代碼是基於evaluted

指定的順序..從FROM開始然後 WHERE第一個和最後一個SELECT和列別名等等..當執行其中列別名不可用在查詢

你可以嘗試有條件,因爲有工作的查詢結果,而不是原始行值..(這可能會影響性能..因爲所有的查詢執行,只有結果被過濾)