2013-04-27 2 views
0

두 개의 선택 쿼리에 참여하고이를 수행하는 방법을 알고 싶습니다.두 개의 선택 쿼리 합치기

SELECT invoice.Eventid, invoice.Invoiceno, 
event.clientid, client.clientid, clientname, gross_amount, VAT, total, due 
FROM client, invoice, event, 
WHERE event.eventid=invoice.eventid and event.clientid = client.clientid group by invoice.eventid 

두 번째 쿼리는 staffmember

의 급여를 확인하고 있습니다 :

첫 번째 쿼리는 나에게 송장 번호, 클라이언트의 이벤트 ID 및 모든 송장 테이블에 저장되는 양에 대한 정보를 제공합니다

SELECT event_ma.eventid, salary.staffid, SUM(cost_hour * TIME_TO_SEC(TIMEDIFF(hours, pause))) /3600 AS costs 
FROM salary 
JOIN event_ma ON salary.staffid = event_ma.staffid 
GROUP BY event_ma.eventid 

마지막으로 이벤트 당 모든 관련 비용과 수입을보고 싶습니다.

당신은 실제로이 방법으로 사용할 수 있습니다

답변

0

:

CREATE VIEW `inv` AS 
    SELECT invoice.Eventid AS inve, invoice.Invoiceno, 
    event.clientid, client.clientid, clientname, gross_amount, VAT, total, due 
    FROM client, invoice, event, 
    WHERE event.eventid=invoice.eventid and event.clientid = client.clientid group by invoice.eventid 

CREATE VIEW `ev` AS 
    SELECT event_ma.eventid AS evee, salary.staffid, SUM(cost_hour * TIME_TO_SEC(TIMEDIFF(hours, pause))) /3600 AS costs 
    FROM salary 
    JOIN event_ma ON salary.staffid = event_ma.staffid 
    GROUP BY event_ma.eventid 

그리고 최종 쿼리를 같은 :

SELECT * FROM `inv`, `ev` 
    WHERE `inve` = `evee`; 

또는 당신은 또한 MySQL의 JOIN이 방법을 사용하는 것이 좋습니다 수 있습니다

SELECT * FROM `inv` 
    JOIN `ev` ON `inv`.`inve` = `ev`.`evee`; 
+0

왜 'Where'대신'JOIN'을 사용하지 않겠습니까? – Vapire

+0

@Vapire는 JOIN 구문에 대해 확신하지 못합니다. 이를 위해 JOIN이 적합합니다. –

+2

나는 JOIN 구문을 수정하는 자유를 취했습니다 ... – Vapire

0

방법은 내가 질문을 이해, 당신은 첫 번째 쿼리를 취할 수있는 다음 두 번째 쿼리 eventID과 일치합니다. 또한, 당신이 첫 번째 쿼리에 가입 이전 구문을 사용하고 있음을 지적 -보다는 사용 :

Select table1.col, table2.col From 
table1 
INNER JOIN table2 On 
table1.colID = table2.colID 

... 

을 그리고 당신의 질문에 대답 : 당신은 사용해야

Select table1.col, table2.col From 
table1, table2 
... 

SELECT invoice.eventid, 
     invoice.invoiceno, 
     event.clientid, 
     client.clientid, 
     clientname, 
     gross_amount, 
     vat, 
     total, 
     due 
FROM client, 
     invoice, 
     event, 
     inner 
     JOIN (SELECT event_ma.eventid, 
        salary.staffid, 
        Sum(cost_hour * Time_to_sec(Timediff(hours, pause)))/3600 
        AS 
          costs 
      FROM salary 
        JOIN event_ma 
         ON salary.staffid = event_ma.staffid 
      GROUP BY event_ma.eventid) x 
     ON invoice.eventid = x.eventid 
WHERE event.eventid = invoice.eventid 
     AND event.clientid = client.clientid 
GROUP BY invoice.eventid 
+0

안녕하세요, 정말 고마워요. –

+0

그러나 위의 자세한 쿼리를 사용할 때 MySQL은 on 절의 invoice.eventid를 알지 못한다고 불평합니다 –

+0

그리고 내부 조인의 열 비용이 테이블에 나타나지 않습니다 –

0

데이터 원본으로 하위 쿼리를 사용하는 쿼리를 작성할 수 있습니다.

select ... 
from 
    (select ...) as q1 
    inner join (select ...) as q2 on ... 
...