我有2个表lc_details
和reference
,其中有reference_no
列。我想比较这些表格,如果reference_no
列中不存在reference
,请从lc_details.reference_no
表格中选择reference.reference_no
。
这是我的代码,但它显示了参考表中的所有数据并重复了多次。
<table class="table table-striped">
<tr>
<th>Sl. No.</th>
<th>Reference No./th>
</tr>
<?php
include("../db/db.php");
$sql_cat="select b.* from lc_details a, reference b where b.reference_no!=a.reference_no' order by reference_no ASC";
$run_sql=mysqli_query($con, $sql_cat);
$i=0;
while($row_cat=mysqli_fetch_array($run_sql)){
$reference_no=$row_cat['reference_no'];
$i++;
?>
<tr align="center">
<td><?php echo $i; ?></td>
<td><?php echo $reference_no; ?></td>
</tr>
<?php } ?>
</table>
答案 0 :(得分:2)
试试这个:
SELECT ref.*
FROM reference AS ref
LEFT JOIN lc_details AS lc_d
ON lc_d.reference_no = ref.reference_no
WHERE lc_d.reference IS NULL
ORDER BY ref.reference_no ASC
让我解释一下:
使用左连接连接表意味着如果右表(在我们的示例中为lc_details表)值或引用不存在于左表中(在我们的示例中为'reference'表),它仍将获取记录。例如:
如果表A包含1,2,3和4的id,而表B仅包含1,2和4的id,则使用左连接将它们连接将产生如下内容:
A.id B.id
1 1
2 2
3 NULL
4 4
所以添加一个where子句只检查表b上具有空id的那些子句将导致:
A.id B.id
3 NULL
的更多信息