MySQL: Query and join two tables

前端 未结 4 1764
灰色年华
灰色年华 2021-01-23 03:17

I have two tables that I believe I want to JOIN. I\'m very new to this and am not completely sure…

The first table is called venues with the variables <

相关标签:
4条回答
  • 2021-01-23 04:01

    How about this?

    SELECT t1.*, t2.*
    FROM venue t1 JOIN venue_terms t2
    ON t1.id = t2.venue
    WHERE (t2.option = 1 AND t2.value = 10)
    

    NOTE: I believe option and value are of type INT.

    If they are of type varchar then change above query to

    SELECT t1.*, t2.*
    FROM venue t1 JOIN venue_terms t2
    ON t1.id = t2.venue
    WHERE (t2.option = '1' AND t2.value = '10')
    

    Update 1

    As per your new requirement, you will just need to add that condition with OR option as shown below.

    SELECT t1.*, t2.*
    FROM venue t1 JOIN venue_terms t2
    ON t1.id = t2.venue
    WHERE 
         (t2.option = 1 AND t2.value = 10)
         OR
         (t2.option = 3 AND t2.value = 14)
    
    0 讨论(0)
  • 2021-01-23 04:03

    This will join the two tables and print out the venues which matches the attributes (option, value) in venue_terms:

    SELECT v.* FROM venue v, venue_terms vt
    WHERE v.id = vt.venue
    AND vt.option = 1 
    AND vt.value = 10
    
    0 讨论(0)
  • 2021-01-23 04:11

    You want to find venues that match conditions in two rows in table venue_terms. This can be accomplished by various methods. The most usual is by joining that table twice (another would be by a grouping query).

    Here's the first way. Join twice to the venue_terms table:

    SELECT v.id                                  --- whatever columns you need 
         , v.slug                                --- from the venues table
         , v.name
    FROM venues AS v
      INNER JOIN venue_terms AS vt1
        ON  vt1.venue = v.id
      INNER JOIN venue_terms AS vt2
        ON  vt2.venue = v.id
    WHERE ( vt1.option = 1 AND vt1.value = 10 )
      AND ( vt2.option = 2 AND vt2.value = 4 ) ;
    

    If you have 3 conditions, join thrice. If you have 10 conditions, join 10 times. It would be good for the efficiency of the query to have a compound index on (option, value, venue) in the terms table.

    0 讨论(0)
  • 2021-01-23 04:17

    try this

    SELECT venue.*, venue_terms.*
    FROM venue 
    INNER JOIN venue_terms ON venue.id = venue_terms.venue 
    WHERE venue_terms.option IN ( 1 ,2)
    AND venue_terms.value IN (10,4)
    GROUP BY venue.id
    
    0 讨论(0)
提交回复
热议问题