我需要从表中加入所有记录,其中至少有一个案例有条件

时间:2013-06-18 22:54:27

标签: mysql sql join where

我有三张桌子:

cp_projeto (id, nome...)

cp_habilidade_projeto (id, id_projeto)

cp_habilidade (id, nome...)

我需要所有项目全部 cp_habilidade,其中cp_projeto只有一个cp_habilidade。我的实际查询:

SELECT
    p.id as id_projeto, 
    p.nome as nome_projeto, 
    p.id_tipo_projeto,  
    p.dhPostagem,   
    cp_habilidade_projeto.id as id_habilidade_projeto,  
    cp_habilidade.nome as nome_habilidade 

FROM (  
    SELECT * FROM cp_projeto 
        WHERE (id_status_projeto = 2)
            ORDER BY dhPostagem DESC LIMIT 0, 10
    ) AS p 
    inner JOIN cp_habilidade_projeto ON (cp_habilidade_projeto.id_projeto = p.id) 
    inner JOIN cp_habilidade ON (cp_habilidade.id = cp_habilidade_projeto.id_habilidade) 
    JOIN cp_sub_categoria ON (cp_sub_categoria.id = p.id_sub_categoria)

WHERE ( 
    p.nome like '%CSS%' 
    OR cp_habilidade.nome like '%CSS%'
)

这只返回cp_habilidade.nome = %CSS%,我需要全部

谢谢!

1 个答案:

答案 0 :(得分:0)

SELECT
    p.id as id_projeto, 
    p.nome as nome_projeto, 
    p.id_tipo_projeto,  
    p.dhPostagem,   
    hp.id as id_habilidade_projeto,  
    h.nome as nome_habilidade
FROM cp_projecto p
JOIN cp_habilidade_projeto hp ON p.id = hp.id_projeto
JOIN cp_habilidade h ON h.id = hp.id_habilidade
WHERE p.id IN ( SELECT cp_habilidade_projeto.id_projeto 
                FROM cp_habilidade 
                JOIN cp_habilidade_projeto ON cp_habilidade.id = cp_habilidade_projeto.id_habilidade
                WHERE cp_habilidade.nome LIKE '%CSS%' )