使用 SQL Join 的 NULL 输出

NULL output with SQL Join

我的问题是我收到了 NULL 输出。我的查询有什么问题?

$pr_code = $mysqli->real_escape_string($_POST['pr_code']);
$counter = $mysqli->real_escape_string($_POST['counter']);

$sql = $mysqli->query("
SELECT 
    a.*,
    b.counter, b.pr pr_b
FROM
    (SELECT *
    FROM pr_list) a
LEFT JOIN
    (SELECT counter, pr
    FROM purchase_request) b 
ON a.pr= b.pr
WHERE a.pr='$pr_code' AND b.counter='$counter'
");

while($row = $sql->fetch_assoc())
  {
  $pr= $row['pr'];
  $approved= $row['approved'];
  $requested = $row['requested'];
  }

这将不会为您提供 purchase_request 值的空值。

A 左联接特别允许 b 为空值。所以我们使用内部连接:

$sql = $mysqli->query("
SELECT 
    a.*,
    b.counter, b.pr pr_b
FROM pr_list a
JOIN purchase_request b 
ON a.pr= b.pr
WHERE a.pr='$pr_code' AND b.counter='$counter'
");

如果您确实需要 LEFT JOIN,请将 WHERE 子句的 b.counter='$counter' 移至 ON 子句。 (否则就是常规的内部联接。)

$sql = $mysqli->query("
SELECT 
    a.*,
    b.counter, b.pr pr_b
FROM pr_list a
JOIN purchase_request b 
ON a.pr= b.pr
WHERE a.pr='$pr_code' AND b.counter='$counter'
");

希望这会有所帮助