mysql - 使用带条件的行进行左连接

标签 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='open' 。我发现这很难理解,所以我会尝试更好地解释。

exp_channel_titles 包含类似以下内容:

entry_id |标题 |状态 | channel_id
1 |保姆|打开| 2
2 | child 保育 |打开| 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

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

但是因为与业务管理(接待员)相关的唯一条目的状态为“已关闭”,所以我不希望此项目出现。我希望查询仅返回托儿服务。

最佳答案

您可以使用别名连接一个表两次,如下所示:

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'

关于mysql - 使用带条件的行进行左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34093462/

相关文章:

php - 当单选按钮的名称是变量时,如何从单选按钮获取数据?

java - 什么语法用于从 JavaDB 数据库中选择常量字段值?

mysql - 预设值为="999"的输入标签插入MYSQL数据库失败

php - MYSQL 选择和插入

mysql - 查询以获取每个日期出席的所有客人

mysql - 通过多个id查询数据(数量较多)

php - 'field list' 中的未知列,在 db 中,在更改字段名称后

php - foreach 重复的复选框字段

php - Laravel - 根据 Laravel 中相似的 id 对记录进行分组

mysql - 使用 CASE WHEN 语句而不是 GROUP BY 给出 null