Mysql 使用带条件的行左连接
我有两张桌子: exp\u频道\u标题Mysql 使用带条件的行左连接,mysql,Mysql,我有两张桌子: exp\u频道\u标题 经验关系 我想从左表(exp\u channel\u titles)中选择不同的行,它们在exp\u relationships中定义了关系。我可以这样做: SELECT DISTINCT exp_channel_titles.title FROM exp_channel_titles LEFT JOIN exp_relationships ON exp_channel_titles.entry_id=exp_relationships.chi
经验关系 我想从左表(exp\u channel\u titles)中选择不同的行,它们在exp\u 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\u channel\u titles.status='open'用于关系中使用的行。我发现这很难理解,所以我会尝试更好地解释
exp\u channel\u标题包含以下内容:
条目id |标题|状态|频道id1 |保姆|开放| 2
2 |托儿|开放| 5
3 |保姆|开放| 2
4 |工商管理|开放| 5
5 |接待员|关闭| 2 exp\u relationships使用exp\u channel\u titles.entry\u id作为exp\u relationships.parent\u id和exp\u relationships.child\u id定义exp\u标题中的行之间的关系。因此,上述行将具有以下关系:
父id |子id
1 | 2
3 | 2
5 | 4 因此,我上面列出的查询将给我:
儿童保育
工商管理
但是,由于唯一与企业管理相关的条目(接待员)的状态为“已关闭”,因此我不希望出现此项。我希望查询只返回childcare。您可以使用以下别名加入表两次:
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'
您的查询返回什么?乍一看,它看起来还不错。但是,如果需要表之间的关系,则不需要进行左联接。你只需要做一个常规的连接,去掉“WHERE child_id IS NOT NULL”子句。它返回儿童保育和商业管理。如果我执行常规联接并去掉WHERE child\u id不为NULL,它仍然不会将exp\u channel\u titles.status='open'应用于联接中使用的行。i、 e.我仍然看到企业管理。您是否可以编辑您的问题以包含exp_关系表/数据的示例?编辑我的问题以显示exp_关系数据。为了清楚起见,exp\u channel\u titles表包含父数据和子数据。如果需要,您也可以加入子查询。谢谢,不幸的是,这仍然显示相关条目状态为“已关闭”的条目,即上面的数据集中仍然显示“business administration”。我将研究子查询,尽管您可能已经猜到我对SQL的理解并不惊人。对不起,我在从SQL窗口复制时漏掉了一行。我编辑了上面的查询。也许这样行?