vendredi 16 octobre 2015

How to create a query for items that appears only in one list

The scenario I am working on is as follows:-

  • A number of interviews are conducted a food poisoning case
  • A query called qryFoodInCase ( fldCaseID, fldFood) is generate consisting of all the food mentioned in all the interviews
  • An other query call qryFoodInInterview( fldCaseID, fldInterviewID, fldFood) consist of the food mentioned in each Interview

Now I am after the sql for a query that will return the food that was not consumed by an interviewee but consumed by one or more other interviewees.

The closest I've got is:

select Q1.fldCaseID,Q1.fldfood,Q2.fldInterviewID,fldGotSick 
from qryFoodInCases as Q1 
left join 
(select * from qryFoodInInterview where qryFoodInInterview.fldInterviewID=1) as Q2
on Q1.fldFood=Q2.fldFood 
where Q1.fldCaseID=1

The field Q2.fldInterviewID returns 1 for the food consumed and null for the food not consumed. However, I don't want to hard code the fldInterviewID in the sql. I would like a similar recordset returned for all the interviews in one query.

The SQL for qryFoodInCase and qryFoodInInterview are as follows:-

CREATE VIEW `qryFoodInCases`
AS
SELECT tblCases.fldCaseID
    ,fldfood
    ,count(tblFoodHistory.fldFoodID) AS fldFoodFrequency
FROM tblFood
INNER JOIN tblFoodHistory
    ON tblFoodHistory.fldFoodID = tblFood.fldFoodID
INNER JOIN tblMealHistory
    ON tblFoodHistory.fldMealID = tblMealHistory.fldMealHistoryID
INNER JOIN tblInterviews
    ON tblInterviews.fldInterviewID = tblMealHistory.fldInterviewID
INNER JOIN tblCases
    ON tblCases.fldCaseID = tblInterviews.fldCaseID
GROUP BY tblCases.fldCaseID, tblFood.fldFood

OUTPUT:

+-----------+------------+------------------+
| fldCaseID |  fldFood   | fldFoodFrequency |
+-----------+------------+------------------+
|         1 | Banana     |                3 |
|         1 | Beans      |                5 |
|         1 | Cabagge    |                3 |
|         1 | Chicken    |                1 |
|         1 | Pork       |                5 |
|         1 | Potatoes   |                1 |
|         1 | Rice       |                1 |
|         1 | fried fish |                1 |
|         2 | Cabagge    |                1 |
|         2 | Chicken    |                2 |
|         2 | Potatoes   |                1 |
|         2 | Rice       |                1 |
|         2 | Salad      |                1 |
+-----------+------------+------------------+

and

CREATE VIEW `qryFoodInInterview`
AS
SELECT tblInterviews.fldCaseID
    ,tblInterviews.fldInterviewID
    ,tblFood.fldFood
    ,tblInterviews.fldGotSick
FROM tblInterviews
INNER JOIN tblMealHistory
    ON tblInterviews.fldInterviewID = tblMealHistory.fldInterviewID
INNER JOIN tblFoodHistory
    ON tblFoodHistory.fldMealID = tblMealHistory.fldMealHistoryID
INNER JOIN tblFood
    ON tblFood.fldFoodID = tblFoodHistory.fldFoodID
GROUP BY tblInterviews.fldInterviewID, tblFoodHistory.fldFoodID

OUTPUT

+-----------+----------------+------------+------------+
| fldCaseID | fldInterviewID |  fldFood   | fldGotSick |
+-----------+----------------+------------+------------+
|         1 |              1 | Pork       |          0 |
|         1 |              1 | Banana     |          0 |
|         1 |              1 | Rice       |          0 |
|         1 |              1 | Potatoes   |          0 |
|         1 |              2 | Chicken    |          1 |
|         1 |              2 | Banana     |          1 |
|         1 |              2 | Beans      |          1 |
|         1 |              4 | Pork       |          1 |
|         1 |              4 | fried fish |          1 |
|         1 |              4 | Beans      |          1 |
|         2 |              6 | Salad      |          0 |
|         2 |              6 | Chicken    |          0 |
|         2 |              6 | Cabagge    |          0 |
|         2 |              6 | Rice       |          0 |
|         2 |              6 | Potatoes   |          0 |
|         1 |              8 | Pork       |          0 |
|         1 |              8 | Cabagge    |          0 |
|         1 |              9 | Pork       |          1 |
|         1 |              9 | Banana     |          1 |
|         1 |              9 | Beans      |          1 |
|         1 |             10 | Cabagge    |          1 |
|         1 |             10 | Beans      |          1 |
|         1 |             11 | Pork       |          1 |
|         1 |             11 | Cabagge    |          1 |
|         1 |             11 | Beans      |          1 |
+-----------+----------------+------------+------------+

Aucun commentaire:

Enregistrer un commentaire