【问题标题】:I need get all records from table joined where at least one case with condition我需要从表中获取所有记录,其中至少有一种情况有条件
【发布时间】:2013-06-18 22:54:26
【问题描述】:

我有三张桌子:

cp_projeto (id, nome...)

cp_habilidade_projeto (id, id_projeto)

cp_habilidade (id, nome...)

我需要 all 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%,我需要它全部

谢谢!

【问题讨论】:

    标签: mysql sql join where


    【解决方案1】:
    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%' )
    

    【讨论】:

    • 这还为每个 cp_project 返回一个 cp_habilidade,同样有一个 cp_project 的各种 cp_habilidade :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多