尝试JOIN表时出现SQL错误

时间:2013-12-17 22:26:00

标签: php sql

我正在尝试运行此查询:

$query = $conn->query("SELECT * FROM $table 
    LEFT JOIN vacatures ON bedrijven.id = vacatures.id 
    WHERE id = '$id' 
    AND bedrijfID = '$bedrijf_id'");

但由于某种原因它失败了。我收到了这个错误。

Syntax error or access violation: 1066 Not unique table/alias

当我离开JOIN部分时,查询成功。为什么会这样?

我正在使用PHP& PDO以获取查询。

感谢。

编辑:我写了查询,感谢给出的答案。这是有效的:

$query = $conn->query("SELECT * FROM bedrijven 
    LEFT JOIN vacatures v ON bedrijven.id = v.bedrijfID WHERE v.bedrijfID = $bedrijf_id AND v.id = $id");

3 个答案:

答案 0 :(得分:2)

您需要在WHERE id = '$id'中指定一个表或另一个表,即使它们在这种情况下彼此相等。

您还需要确保您的LEFT JOIN包含$table

$query = $conn->query("SELECT * FROM $table 
  LEFT JOIN vacatures ON $table.id = vacatures.id 
  WHERE $table.id = '$id' 
  AND bedrijfID = '$bedrijf_id'");

或:

$query = $conn->query("SELECT * FROM bedrijven 
  LEFT JOIN vacatures ON bedrijven.id = vacatures.id 
  WHERE bedrijven.id = '$id' 
  AND bedrijfID = '$bedrijf_id'");

答案 1 :(得分:1)

你的问题不是很清楚,但是如果你只想尝试一个简单的连接,其中表1上的id =表2上的id,那么下面的语句就可以了。如果那是你试图做的,那么AND语句是多余的。如果没有明确定义的变量明确定义的问题,很难知道你的目标是什么。另外,使用如下所示的预准备语句,而不是直接将变量插入到语句中。尽可能避免使用SELECT *。只选择绝对必要的东西。

$query = $conn->prepare("SELECT * FROM bedrijven b 
    LEFT JOIN vacatures v 
    ON b.id = v.id
    WHERE v.id = :id");
$query->bindValue(':id', $id);
$query->execute();

答案 2 :(得分:0)

'$ id'将被视为字符串而不是变量。如果两个表都有一个名为id的字段,则需要将id指定为table.id。

$query = $conn->query("SELECT * FROM $table LEFT JOIN vacatures ON bedrijven.id =      vacatures.id WHERE $table.id = $id AND bedrijfID = $bedrijf_id");