我想创建一个SQL查询,如果给定名称与父级名称或子级名称匹配,则返回父级行列表。因此,如果名称与父项匹配,则返回该父项。如果名称与孩子匹配,则返回该孩子的父母。父行在结果中不应出现多次。
考虑以下示例(运行一些漂亮的HTML表的代码段):
table, th, td {
border: 1px solid black;
border-collapse: collapse;
padding: 3px;
}
<h2>Parent table</h2>
<table>
<tr>
<th>id</th>
<th>name</th>
</tr>
<tr>
<td>1</td>
<td>Karl</td>
</tr>
<tr>
<td>2</td>
<td>Robert</td>
</tr>
</table>
<h2>Child table</h2>
<table>
<tr>
<th>id</th>
<th>parent</th>
<th>name</th>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>Samuel</td>
</tr>
<tr>
<td>2</td>
<td>1</td>
<td>Karl</td>
</tr>
<tr>
<td>3</td>
<td>1</td>
<td>Robert</td>
</tr>
</table>
<h2>Result for Karl</h2>
<table>
<tr>
<th>id</th>
<th>name</th>
</tr>
<tr>
<td>1</td>
<td>Karl</td>
</tr>
</table>
<h2>Result for Robert</h2>
<table>
<tr>
<th>id</th>
<th>name</th>
</tr>
<tr>
<td>1</td>
<td>Karl</td>
</tr>
<tr>
<td>2</td>
<td>Robert</td>
</tr>
</table>
<h2>Result for Samuel</h2>
<table>
<tr>
<th>id</th>
<th>name</th>
</tr>
<tr>
<td>2</td>
<td>Robert</td>
</tr>
</table>
到目前为止,这是我尝试过的:
SELECT Parent.*
FROM Parent,
Child
WHERE Parent.name = :name_parameter
OR Child.name = :name_parameter AND Child.parent = Parent.id
但是它不起作用,结果始终为空。
尝试这个:
select distinct Parent.*
from Parent
left join Child on Child.parent = Parent.id
where Parent.name = :name_parameter
or Child.name = :name_parameter
distinct
删除重复项。
left
仍然返回没有孩子的父母。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句