我有一个名为dogs的表,其中有以下行
dog_id(主要)
狗名
父亲
dam
对于狗的父亲或母亲,我输入与狗的名字有关的dog_id。 我正在尝试通过dog_id行列出一条狗的父亲和母亲。 但是,当我运行查询时,它不会仅显示dog_id来显示dog_name。
对此将有任何帮助。
<?php
$query = "SELECT dogs.dog_id, dogs.dog_name, pedigree.sire, pedigree.dam
FROM dogs
JOIN dogs pedigree";
$get_pedigree = mysqli_query($connection,$query);
while ($row_dog = mysqli_fetch_assoc($get_pedigree))
$sire = $row['sire'];
$dam = $row['dam'];
?>
答案 0 :(得分:1)
您需要添加一个ON
子句,以使SQL知道如何链接表。
例如
SELECT dogs.dog_id, dogs.dog_name, pedigree.sire, pedigree.dam
FROM dogs
JOIN pedigree ON pedigree.dog_id = dogs.dog_id
也可以通过使用JOIN
而不是说LEFT JOIN
来获得结果,前提是两个表都具有匹配的ID。
更新后的响应;
如果父亲和母亲是自引用ID,则应该可以;
SELECT dogs.dog_id,
dogs.dog_name,
father.dog_id AS father_dog_id,
father.dog_name AS father_dog_name,
mother.dog_id AS mother_dog_id,
mother.dog_name AS mother_dog_name
FROM dogs
LEFT JOIN dogs AS father ON father.dog_id = dogs.sire
LEFT JOIN dogs AS mother ON mother.dog_id = dogs.dam
答案 1 :(得分:1)
您的语法已关闭,您需要一个on
子句,以便它知道两个表之间的关系。
SELECT dogs.dog_id, dogs.dog_name, pedigree.sire, pedigree.dam
FROM dogs
JOIN pedigree
on dogs.dog_id = pedigree.dog_id
我假设pedigree
也有一个dog_id?
如果两个表使用相同的列名,则on
的替代项可以是using
:
using(dog_id)
好的,使用更新的描述,您可以执行以下操作来获取父母的姓名。
select group_concat(parents.name), dog.id, dog.name
from dogs as dog
left join dogs as parents
on dog.mom = parents.id or dog.dad= parents.id
group by dog.id
或者如果您需要两个列都独立,则可以执行上面的双重联接。