I have a very simple matching table with the following information (in real life the table contains different ids for other tables instead of fruit/colors, but the fruit example makes it easier to understand I hope):
[ID] [FRUIT] [POSSIBLECOLORS] 1 apple green 2 apple red 3 apple yellow 4 banana yellow 5 banana brown 6 strawberry red 7 cherry red
What I want to do now is a select, that returns for example only fruits that match the POSSIBLECOLORS green AND yellow at the same time. In this example the result I want is “apple”, because it is the only fruit, that matches both colors.
If I do
SELECT * FROM table WHERE possiblecolors = green AND possiblecolors = yellow GROUP BY fruit
then my result is of course NULL, because no entry matches both in one row.
If I do
SELECT * FROM table WHERE possiblecolors = green OR possiblecolors = yellow GROUP BY fruit
then my result is of course “apple” and “banana”, as both have an entry that says yellow.
So how can I design a MySQL select that returns only “apple”?
Advertisement
Answer
If you want just the list of fruit, then use aggregation and having:
select fruit from t where possiblecolor in ('green', 'yellow') group by fruit having count(*) = 2;