我有两张桌子:
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
所以我上面概述的查询会给我:
育儿
工商管理
但是因为与工商管理相关的唯一条目(接待员)的状态为“关闭”状态。我不希望这个项目出现。我希望查询只返回托儿所。
答案 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'