使用 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'
");
希望这会有所帮助
我的问题是我收到了 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'
");
希望这会有所帮助