I have two tables:
Table A:
| Name | Value |
|---|---|
| ABC | 95 |
| XYZ | 85 |
Table B:
| Category | Value |
|---|---|
| MaxVal | 90 |
| MinVal | 80 |
I want to achieve this result 85 is between 80 and 90 value, so we filter out only XYZ and not ABC :
| Result |
|---|
| XYZ |
I'm trying as below:
SELECT Name as Result from TableA a, TableB b, TableB c
where a.value < b.value and a.value > c.value
and b.value=c.value and 1=1;
Is there a better way to do this?
CodePudding user response:
Get rid of b.value=c.value, which is filtering out all records and select proper categories from tables b and c:
SELECT Name as Result from TableA a, TableB b, TableB c
where a.value < b.value and b.category = 'MaxVal'
and a.value > c.value and c.category = 'MinVal';
Here's another option, in my opinion more readable:
SELECT Name as Result FROM TableA
WHERE a.value > (SELECT value FROM TableB WHERE category = 'MinVal')
AND a.value < (SELECT value FROM TableB WHERE category = 'MaxVal');
