使用条件的行进行左连接

时间:2015-12-04 16:54:05

标签: mysql

我有两张桌子:

exp_channel_titles
exp_relationships

我想从左表中选择不同的行( exp_channel_titles ),在这些行中,他们具有在 exp_relationships 中定义的关系。我可以这样做:

SELECT DISTINCT exp_channel_titles.title  
FROM exp_channel_titles  
LEFT JOIN exp_relationships  
ON exp_channel_titles.entry_id=exp_relationships.child_id  
WHERE exp_relationships.child_id IS NOT NULL  
AND exp_channel_titles.channel_id=5  
AND exp_channel_titles.status='open'

问题是我想确保exp_channel_titles.status ='打开'对于关系中使用的行。我发现这很困难,所以我会尝试更好地解释。

exp_channel_titles 包含以下内容:

entry_id |标题|状态| CHANNEL_ID
1 |保姆|打开| 2
2 |育儿|打开| 5
3 |保姆|打开| 2
4 |工商管理|打开| 5
5 |接待员|关闭| 2

exp_relationships 使用 exp_channel_titles.entry_id 作为 exp_relationships.parent_id 定义 exp_channel_titles 中各行之间的关系exp_relationships.child_id 即可。所以上面的行会有以下关系:
parent_id | child_id
1 | 2
3 | 2
5 | 4

所以我上面概述的查询会给我:
育儿
工商管理

但是因为与工商管理相关的唯一条目(接待员)的状态为“关闭”状态。我不希望这个项目出现。我希望查询只返回托儿所。

1 个答案:

答案 0 :(得分:0)

您可以使用以下别名加入表格两次:

SELECT DISTINCT
    ect.title 
FROM
    exp_channel_titles ect
JOIN
    exp_relationships er
    ON ect.entry_id = er.child_id
JOIN
    exp_channel_titles ect2
    ON ect2.entry_id = er.parent_id
WHERE
    ect.channel_id = 5
    AND ect.status = 'open'
    AND ect2.status = 'open'