2014-03-27 150 views
-2

這是我的mysql查詢!mysql query does not work

SELECT projects.projects_id, 
     projects.projects_title, 
     projects.projects_cost 
    FROM projects 
     LEFT JOIN invoice 
      ON invoice.projects_id = projects.projects_id 
     LEFT JOIN project_assign 
      ON project_assign.projects_id=projects.projects_id 
WHERE project_assign.assigned_user_id=3 
     AND (SUM(invoice.invoice_amount) < projects.projects_cost 
      OR invoice.projects_id is null) 
     AND project_assign.project_completed_date IS NOT NULL 

在此查詢我要選擇所有的行是:

  1. 沒有出現在例如其他表(在我的情況等表 「發票」)
  2. 或者,如果persent那麼這個條件必須持有sum(invoice.invoice_amount) < projects.projects_cost

感謝。

+0

那麼問題是什麼。你有錯誤嗎,你沒有得到你想要的結果嗎?你的表格佈局是什麼樣的,你能提供一些虛擬數據嗎?所有這些都將幫助我們理解目前它是一個非常模糊的問題。 –

+0

'sum(invoice.invoice_amount)'在做什麼? – KrazzyNefarious

+0

我收到此錯誤「SQL錯誤(1111)無效使用組函數」 – Shahabi

回答

0
select projects.projects_id, projects.projects_title,projects.projects_cost 
from projects 
left join invoice 
on invoice.projects_id = projects.projects_id 
left join project_assign 
on project_assign.projects_id=projects.projects_id 
where project_assign.assigned_user_id=3 and 
((select sum(invoice.invoice_amount) from invoice) < projects.projects_cost or invoice.projects_id is null) 
and project_assign.project_completed_date is not null 
0

您不能將聚合函數放在where子句中。在這種情況下,您可以使用子查詢進行聚合,然後執行比較:

SELECT p.projects_id, p.projects_title, p.projects_cost 
FROM projects p LEFT JOIN 
    (select i.projects_id, sum(invoice_amount) as invoice_amount 
     from invoice i 
    ) i 
    ON i.projects_id = p.projects_id LEFT JOIN 
    project_assign pa 
    ON pa.projects_id = p.projects_id 
WHERE pa.assigned_user_id = 3 AND 
     (i.invoice_amount < p.projects_cost OR i.projects_id is null) AND 
     pa.project_completed_date IS NOT NULL; 
0

劃分您的問題。使用UNION。首先使用一個查詢來選擇第一個表中不存在的所有記錄(使用LEFT JOIN),將第二個查詢的結果與第二個查詢的結果相結合,這將使您滿足第二個條件的所有記錄(使用外連接)

//Select all records present in left table 
//union 
//select all records present in both tables matching your condition. 

    SELECT projects.projects_id, 
     projects.projects_title, 
     projects.projects_cost 
    FROM projects 
     LEFT JOIN invoice 
      ON invoice.projects_id = projects.projects_id 
     LEFT JOIN project_assign 
      ON project_assign.projects_id=projects.projects_id 
    WHERE project_assign.assigned_user_id=3 
    AND project_assign.project_completed_date IS NOT NULL 
    UNION 
    SELECT projects.projects_id, 
     projects.projects_title, 
     projects.projects_cost 
    FROM projects 
     INNER JOIN invoice 
      ON invoice.projects_id = projects.projects_id 
     INNER JOIN project_assign 
      ON project_assign.projects_id=projects.projects_id 
    WHERE project_assign.assigned_user_id=3 
    AND (SUM(invoice.invoice_amount) < projects.projects_cost 
    AND project_assign.project_completed_date IS NOT NULL