Reputation: 3579
I have two tables. One table contains information about Assets, another Table about their relation. How could I optimize current query and getting similar results.
SELECT a1.ID FROM Asset a1
WHERE a1.AssetId =
(SELECT r.DestinationAssetId
FROM Relation r
INNER JOIN Asset a2 ON a2.AssetId = r.SourceAssetId
WHERE a2.ID = '1112174' and r.RelationshipType = 'Video File')
Results: 13412331 (ID of Asset which is related to a2.ID = '1125574')
Personally I don't like this stupid sub query, is it any way I can avoid it and optimize this query.
Thanks!
Upvotes: 3
Views: 82
Reputation: 198
At first glance, it looks like this would do the same thing:
SELECT a1.ID
FROM Relation r
INNER JOIN Asset a2 ON a2.AssetId = r.SourceAssetId
INNER JOIN Asset a1 ON a1.AssetId = r.DestinationAssetId
WHERE a2.ID = '1112174' and r.RelationshipType = 'Video File'
Upvotes: 2
Reputation: 66687
Try this:
SELECT a1.ID
FROM Asset a1
INNER JOIN Relation r ON a1.AssetId = r.DestinationAssetId
INNER JOIN Asset a2 ON a2.AssetId = r.SourceAssetId
WHERE a2.ID = '1112174' and r.RelationshipType = 'Video File'
Upvotes: 1
Reputation: 41539
You can lose the subquery:
SELECT dest.ID
FROM
Asset src
JOIN Relation r ON src.AssetId = r.SourceAssetId
JOIN Asset dest ON dest.AssetID = r.DestinationAssetID
WHERE src.ID = '1112174' and r.RelationshipType = 'Video File'
Its not much of an optimization performance wise, but it is a little neater.
Upvotes: 4