I am working in a SQLite database where the tables are not quite normalized. Can't change much about that, so I have to work with wat I have.
The two tables I use look like this:
sets:
| ID | location | year | L1 | L2 | L3 | L4 |
data:
| ID | SET_ID | T | D1 | D2 | D3 | D4 |
Now I am using inner join to connect these to on sets.id and data.set_id However I also need to find the D1, D2, D3 or D4 with the value closest to X Therefor I am using a INNER JOIN (SELECT xxx) in which I do a query with UNION ALL.
Within this inner join select I need to use a where clause for the data.id it needs to have the value as it would have in the 'main' query.
this is the query I cooked up, it does work if I use a hard coded id, so now the question is how to use a variable id?
SELECT S.ID, S.Location, S.year S.L1, S.L2, S.L3, S.L4 D.ID as DataID, D.T, N.source, N.val
FROM sets S
INNER JOIN data D ON (S.id = D.SET_ID)
INNER JOIN (SELECT data_id, source, val, ABS(val - 80) AS diff
FROM (
SELECT ID AS data_id, 'D1' AS source, D1 AS val FROM data
WHERE id = DataID
UNION ALL
SELECT ID, 'D2', D2 FROM data
WHERE id = DataID
UNION ALL
SELECT ID, 'D3', D3 FROM data
WHERE id = DataID
UNION ALL
SELECT ID, 'D4', D4 FROM data
WHERE id = DataID
)
ORDER BY diff ASC limit 1 ) N ON (D.ID = N.data_id)
WHERE S.Locatie = 'Monsin'
AND S.year = 2015
ORDER BY ABS(D.T - 10) ASC LIMIT 1
Aucun commentaire:
Enregistrer un commentaire