比较2个表并从一个表中选择数据

时间:2015-12-08 05:18:12

标签: php mysqli

我有2个表lc_detailsreference,其中有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>

1 个答案:

答案 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

了解有关joining tables and their differences, try this link

的更多信息