I have two oracle select queries like
SELECT loc.location AS LOCATION , req.requisition AS REQ
FROM location_view loc, requisition_view req, association ass
WHERE loc.name = 'ABC' AND req.name = 'TRANSFER'
AND ass.entity_id_2 = req.entity_id AND ass.entity_id_1 = loc.entity_id
And the result looks like:
Other query is like:
SELECT req.requisition AS req, exp.experiment AS expt
FROM experiment_view exp, requisition_view req, association_view ass
WHERE expt.name = 'RETRIEVAL'AND req.name = 'TRANSFER'
AND ass.entity_id_2 = req.entity_id AND ass.entity_id_1 = expt.entity_id
Result :
I am trying to combine these two SELECT
queries so I get to see these results:
Should I be using Sub-Queries to see the combined result or is there any other way of optimizing?
I'm not sure the provided solutions are correct. All of them are using 1 join to the association table. You need 2. Because Association looks to be a generic mapping table so the row that joins locations to requisitions is not the same as the one which joins requisitions to experiments. Maybe i'm wrong but i'd go for :
SELECT
loc.location as LOCATION ,
req.requisition as REQ,
exp.experiment as EXPT
FROM location_view loc
JOIN association asslr ON asslr.entity_id_1 = loc.entity_id
JOIN requisition_view req ON asslr.entity_id_2 = req.entity_id and req.name = 'TRANSFER'
JOIN association_view assre ON assre.entity_id_2 = req.entity_id
JOIN experiment_view exp ON assre.entity_id_1 = exp.entity_id AND exp.name = 'RETRIEVAL'
WHERE loc.name = 'ABC'
The two queries are nearly identical. The results can be joined together on a common element so yes, they can just be written as one query:
select loc.location as LOCATION , req.requisition as REQ, exp.experiment as expt
from location_view loc, requisition_view req, association ass, experiment_view exp
where loc.name = 'ABC' and req.name = 'TRANSFER' and ass.entity_id_2 = req.entity_id and ass.entity_id_1 = loc.entity_id and ass.entity_id_1 = expt.entity_id and expt.name = 'RETRIEVAL'
This is a bit of an ancient nonstandard way to write queries though; look into how the INNER JOIN keywords work; here's how I'd have laid this query out:
select
loc.location as LOCATION ,
req.requisition as REQ,
exp.experiment as expt
from
association ass
INNER JOIN
location_view loc
ON
ass.entity_id_1 = loc.entity_id
INNER JOIN
requisition_view req
on
ass.entity_id_2 = req.entity_id
INNER JOIN
experiment_view expt
ON
ass.entity_id_1 = expt.entity_id
WHERE
loc.name = 'ABC' and
req.name = 'TRANSFER' and
expt.name = 'RETRIEVAL'
SELECT loc.location AS location,
req.requisition AS req,
exp.experiment AS expt
FROM location_view loc
INNER JOIN association ass
ON loc.entity_id = ass.entity_id_1
INNER JOIN requisition_view req
ON req.entity_id = ass.entity_id_2
INNER JOIN experiment_view exp
ON expt.entity_id = ass.entity_id_1
WHERE loc.name = 'ABC'
AND req.name = 'TRANSFER'
AND expt.name = 'RETRIEVAL'
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.