I am trying to write a query that can match a list of strings on a subquery. Example
TableA
id | value |
---|---|
1 | somevalue1 |
2 | somevalue2 |
TableB
id | value | tableA_id |
---|---|---|
1 | test1 | 1 |
2 | test2 | 1 |
3 | test1 | 2 |
I need a query that returns all the entries from TableA who have an entry in TableB for a list of strings.
For:
select * from TableA ta where ('test1', 'test2') = (select tb.value from TableB tb where tb.tableA_id = ta.id);
Expected result would be
id | value |
---|---|
1 | somevalue1 |
because this is the only entry in TableA that has entries for both those string values in TableB.
I tried to look on the internet on how to match a list of string in MySQL but didn't found something that I can use, my sql skills are at beginner level.
Thanks in advance.
CodePudding user response:
Actually you may not even need to involve TableA
in this query. I suggest the following canonical aggregation approach on TableB
:
SELECT tableA_id
FROM TableB
WHERE value IN ('test1', 'test2')
GROUP BY tableA_id
HAVING COUNT(DISTINCT value) = 2;
CodePudding user response:
SELECT DISTINCT ta.id FROM
TableA ta, TableB tb
WHERE (ta.id = tb.id)
AND tb.value in ('test1', 'test2')