从 mysql JOIN 获取所有结果,即使没有匹配的连接

Get all results from mysql JOIN, even if no join matches

我正在 table 和它自身之间进行 JOIN 操作。 table 架构类似于:

| id | name | parent |
|  0 | .... |   ...  |
|  1 | .... |   ...  |
|  2 | .... |   ...  |

查询如下:

$qMarks = str_repeat('?,', count($arr) - 1) . '?';
$stmt = $db->prepare("SELECT t1.id AS t1id, t1.name AS t1name, t2.name AS t2name 
                            FROM cats t1 
                            JOIN cats t2 ON t1.parent = t2.id
                            WHERE t1.name IN ($qMarks)");
$stmt->execute($arr);
$result = $stmt->fetchAll();

所以,我传递了一个名称数组 $arr,然后我返回了与参数数组中的一项匹配的名称的行。这工作正常,只要在 parent.

的某处也有匹配的 id

但是,有时 parent 的值将为空白(空单元格)。我还是想得到那些结果,只要满足 t1.name IN ($qMarks) 条件即可。

如何 return 值,即使 table 中的 t1.parent 值为空?

使用 left join.

$stmt = $db->prepare("SELECT t1.id AS t1id, t1.name AS t1name, t2.name AS t2name 
                        FROM cats t1 
                        LEFT JOIN cats t2 ON t1.parent = t2.id
                        WHERE t1.name IN ($qMarks)");