mysql: how to formulate WHERE for  2-out-of-3   "matches"

Posted on 2013-01-14
Last Modified: 2013-01-14
i need to select records where at least 2 of 3 conditions are met.
How is this best done?
Below is probe code for what i'm after...

    A = 1
    B = 2
    C = 3

if the WHERE clause were an "expression language" then something like the following might suffice  which "adds up"  the successful terms in the "equation"

   (if (A=1) then 1 else 0)
   (if (B=2) then 1 else 0)
   (if (C=3) then 1 else 0)


Question by:willsherwood
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
LVL 41

Assisted Solution

ralmada earned 333 total points
ID: 38775405
you could try

where       (case when A=1 then 1 else 0 end) +
      (case when B=2 then 1 else 0 end) +
      (case when C=3 then 1 else 0 end)  >= 2
LVL 47

Assisted Solution

by:Dale Fye (Access MVP)
Dale Fye (Access MVP) earned 167 total points
ID: 38775411
Not sure of the MySQL syntax, but try something like:

SELECT *,  (if(A=1, 1, 0) + if(B=2, 1, 0) + if(C=3, 1, 0)) as Matches
FROM yourTabletbl
WHERE (if(A=1, 1, 0) + if(B=2, 1, 0) + if(C=3, 1, 0)) >= 2
LVL 41

Accepted Solution

ralmada earned 333 total points
ID: 38775416
mysql also supports if()


where       if(A=1, 1, 0) +
      if(B=2, 1, 0) +
      if(C=3, 1, 0)  >= 2
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!


Author Closing Comment

ID: 38775423
excellent, many thanks.
this is easier than i had feared.
LVL 47

Expert Comment

by:Dale Fye (Access MVP)
ID: 38775511
The advantage of including the Matches column in the query results is that you can then identify how many of the matches were made.

Another alternative, if you want to be able to identify which conditions matched by simply looking at the Matches field would be:

SELECT *,  (if(A=1, "A","") & if(B=2, "B", "") & if(C=3, "C", "")) as Matches
FROM yourTabletbl
WHERE LEN(if(A=1, "A","") & if(B=2, "B", "") & if(C=3, "C", "")) >= 2

Author Comment

ID: 38775581
clever,  THANK YOU!
LVL 47

Expert Comment

by:Dale Fye (Access MVP)
ID: 38775679
glad to help

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Several part series to implement Internet Explorer 11 Enterprise Mode
In threads here at EE, each comment has a unique Identifier (ID). It is easy to get the full path for an ID via the right-click context menu. However, we often want to post a short link within a thread rather than the full link. This article shows a…
This Micro Tutorial will demonstrate how to add subdomains to your content reports. This can be very importing in having a site with multiple subdomains.
Shows how to create a shortcut to site-search Experts Exchange using Google in the Chrome browser. This eliminates the need to type out whenever you want to search the site. Launch the Search Engine Menu: In chrome, via you…

730 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question