Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用带条件的行左连接_Mysql - Fatal编程技术网

Mysql 使用带条件的行左连接

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频道\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.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 |标题|状态|频道id
1 |保姆|开放| 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 idexp\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窗口复制时漏掉了一行。我编辑了上面的查询。也许这样行?