MySQL select join where AND where

后端 未结 3 1124
忘了有多久
忘了有多久 2020-12-14 21:10

I have two tables in my database:

Products

  • id (int, primary key)
  • name (varchar)

ProductTags

相关标签:
3条回答
  • 2020-12-14 21:49

    you need to have a group by / count to ensure all are accounted for

    select Products.*
      from Products 
             join ( SELECT Product_ID
                      FROM ProductTags
                      where ProductTags.tag_id IN (1,2,3)
                      GROUP BY Products.id
                      having count( distinct tag_id ) = 3 ) PreQuery
            on ON Products.id = PreQuery.product_id 
    
    0 讨论(0)
  • 2020-12-14 22:06

    This type of problem is known as relational division

    SELECT Products.* 
    FROM Products
    JOIN ProductTags ON Products.id = ProductTags.product_id
    WHERE ProductTags.tag_id IN (1,2,3)
    GROUP BY Products.id /*<--This is OK in MySQL other RDBMSs 
                              would want the whole SELECT list*/
    
    HAVING COUNT(DISTINCT ProductTags.tag_id) = 3 /*Assuming that there is a unique
                                                  constraint on product_id,tag_id you 
                                                  don't need the DISTINCT*/
    
    0 讨论(0)
  • 2020-12-14 22:06

    The MySQL WHERE fieldname IN (1,2,3) is essentially shorthand for WHERE fieldname = 1 OR fieldname = 2 OR fieldname = 3. So if you aren't getting the desired functionality with WHERE ... IN then try switching to ORs. If that still doesn't give you the results you want, then perhaps WHERE ... IN is not the function you need to use.

    0 讨论(0)
提交回复
热议问题