如何正确使用where-with-join-in-sql和php

qxsslcnc  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(275)

所以我试图在php中实现一个join,但是我不知道如何在查询中包含带有join的where子句。
我想做的是:

SELECT SpecialFacts.ConservationStatus, SpecialFacts.Reproduction, SpecialFacts.Length, Habitat.Type, Habitat.located

FROM SpecialFacts

INNER JOIN Habitat ON SpecialFacts.SpeciesID=Habitat.SpeciesID

WHERE SpeciesID="G. cuvier"

基本上,我试图确保连接发生在speciesid为g的表上。cuvier,但我到目前为止所尝试的一切都不起作用,它现在给我的错误是“where子句中的column speciesid是含糊不清的”。
以下是我的相关php代码:

<?php 

include 'connect.php';

$result = mysqli_query($connect,"SELECT SpecialFacts.ConservationStatus, SpecialFacts.Reproduction, SpecialFacts.Length, Habitat.Type, Habitat.located FROM SpecialFacts INNER JOIN Habitat ON SpecialFacts.SpeciesID=Habitat.SpeciesID WHERE SpeciesID='G. cuvier'") or die("fail" . mysqli_error($connect));

$i = 0;
while($row = mysqli_fetch_array($result))
{
    echo $row[$i];
    $i = $i + 1;
}
von4xj4u

von4xj4u1#

改用下面的查询

SELECT SpecialFacts.ConservationStatus, SpecialFacts.Reproduction, SpecialFacts.Length, Habitat.Type, Habitat.located
FROM SpecialFacts INNER JOIN Habitat 
ON SpecialFacts.SpeciesID=Habitat.SpeciesID
WHERE SpecialFacts.SpeciesID='G. cuvier'

我使用了单引号和列名与表名。

vnzz0bqm

vnzz0bqm2#

它不会因为你在使用 WHERE 不正确。这是因为在您的查询中有多个表有一个同名的列,因此出现了“不明确”错误。您只需要通过将表名添加到标识符来消除歧义。

WHERE SpecialFacts.SpeciesID="G. cuvier"

WHERE Habitat.SpeciesID="G. cuvier"

因为您是对该列上的表进行内部连接,所以任何一个表都应该适用于where子句。出于性能原因,我建议使用较小的表,但老实说,我不能100%确定它是否重要。你能做到的 EXPLAIN 看看他们是如何比较的。

y4ekin9u

y4ekin9u3#

SpeciesID 在两个表中都存在,所以它不知道哪些需要与给定的值进行比较 G. cuvier . 当您将每个列名作为带点(.)的表名写入时,where condition列中应该是相同的 SpecialFacts.SpeciesID = "G. cuvier" .
所以查询应该是这样的:

SELECT SpecialFacts.ConservationStatus, SpecialFacts.Reproduction, SpecialFacts.Length, Habitat.Type, Habitat.located

FROM SpecialFacts

INNER JOIN Habitat ON SpecialFacts.SpeciesID=Habitat.SpeciesID

WHERE SpecialFacts.SpeciesID="G. cuvier"

相关问题