代码之家  ›  专栏  ›  技术社区  ›  Scott

同一表中搜索不同的mysql查询

  •  2
  • Scott  · 技术社区  · 14 年前

    我想做的是在一个有两个不同值的表中搜索,这很难解释,所以我只举一个例子。

    表:人

    +----------------+
    | id     name    |
    |----------------|
    | 1      Bob     |
    | 2      Jack    |
    | 3      Waly    |
    | 4      Alex    |
    ++++++++++++++++++
    

    表:动物

    +------------------------------------------+
    | id   person    key          value        |
    |------------------------------------------|
    | 1    1         dog          Terrier      |
    | 2    1         dog          Shepherd     |
    | 3    1         bird         African Grey |
    | 4    3         cat          Toyger       |
    | 5    3         cat          Korat        |
    | 6    2         dog          Terrier      |
    ++++++++++++++++++++++++++++++++++++++++++++
    

    例如: 我只想选择那些有一只狗,一只猎犬和一只非洲鸟的人,所以它应该返回1(bob)。我需要能够添加和删除参数,我可能只希望拥有一只猎犬的人返回1(bob)和2(jack)。

    我已经尝试过基本的SQL,但是已经使它工作了,因为当您限制键的时候,您可以搜索另一个。下面的查询是我尝试过的,我想返回的内容:1(bob)。

    SELECT p.id, p.name
    FROM people p, animals a
    WHERE p.id = a.person
    AND (a.key = 'dog' AND a.value LIKE '%Terrier%' )
    AND (a.key = 'bird' AND a.value LIKE '%African%' )
    

    如果可能的话,我想把所有的动物排在同一张桌子上,这样我就不必把它们分开。谢谢你的帮助!

    2 回复  |  直到 14 年前
        1
  •  5
  •   Andomar    14 年前

    您将需要多个表查找,每个表查找一个特定的动物。例如,使用双重联接:

    select  *
    from    people p
    join    animals a1
    on      a1.person = p.id
    join    animals a2
    on      a2.person = p.id
    where   a1.key = 'dog' and a1.value like '%Terrier%'
            and a2.key = 'bird' and a2.value like '%African%'
    

    或者存在一个双精度:

    select  *
    from    people p
    where   exists
            (
            select  *
            from    animals a
            where   a.person = p.id
                    and a.key = 'dog' 
                    and a.value like '%Terrier%'
            )
            and exists
            (
            select  *
            from    animals a
            where   a.person = p.id
                    and a.key = 'bird' 
                    and a.value like '%African%'
            )
    
        2
  •  0
  •   websch01ar    14 年前
    Select p.id, p.name 
    from people p 
    INNER JOIN animals a on p.id = a.person
    WHERE ((a.key ='dog' and a.value Like '%Terrier%') and (a.key = 'bird' and a.value Like '%African Grey%'))