MySQL连接表必须包含某些值

时间:2014-09-16 06:11:19

标签: mysql sql

我有一个包含人的MySQL表。这些人被分配了一种或多种人。人物类型存储在不同的MySQL表中,我使用连接来链接数据。

我想要做的是选择特定类型的人。

在下面的示例中,我想选择人员12344321中的人。他们也可以是其他类型的人,但他们必须至少在我指定的两个人中。

这是我尝试的查询,但没有返回任何内容。

SELECT p.person_id
    FROM people AS p 
    INNER JOIN people_types AS pt ON pt.person_id = p.person_id AND pt.type_id IN ('1234') AND pt.type_id IN ('4321')

是否有允许我这样做的特定功能?


修改

我建议加入桌子两次。但这似乎效率低下。如果我使用LEFT JOIN代替会提供更多灵活性会怎样?

SELECT p.person_id
    FROM people AS p 
    LEFT JOIN people_types AS pt ON pt.person_id = p.person_id
    WHERE pt.type_id IN ('1234') AND pt.type_id IN ('4321'

1 个答案:

答案 0 :(得分:1)

如果您希望该人员属于您指定的两种类型,那么您需要两次加入PersonTypes。 我认为这应该有用,

SELECT p.person_id
    FROM people AS p 
    INNER JOIN people_types AS pt ON pt.person_id = p.person_id AND pt.type_id IN ('1234')
    INNER JOIN people_types AS pt1 ON pt1.person_id = p.person_id AND pt1.type_id IN ('4321')

为避免加入,

select PersonID,count(id) from PersonType
where TypeID in(1,2)
group by PersonID 
having count(id) >= 2

参见演示here

相关问题