忽略null会导致MySQL JOIN查询

时间:2011-07-14 22:36:26

标签: php mysql join

我有一个MySQL连接查询,效果很好 (免责声明:取自教程)

<?php
    $connection = mysql_connect("localhost", "root", "test") or die("Error connecting to database");
    mysql_select_db("products90", $connection);
    $result = mysql_query("SELECT * FROM buyers LEFT JOIN products USING (id);", $connection) or die("error querying database");
    $i = 0;
    while($result_ar = mysql_fetch_assoc($result)){
    ?>
    <table>
    <tr <?php if($i%2 == 1){ echo "class='body2'"; }else{echo "class='body1'";}?>>
    <td>
    <?php echo $result_ar['buyer_name']; ?></td>
    <td>
    <?php echo $result_ar['manufacturer']; ?>
    </td>
    <td>
    <?php echo $result_ar['product_name']; ?>
    </td>
    </tr>
    </table>
    <?php
    $i+=1;
    }
    ?>

但是,如果我希望它忽略NULL结果,我需要用JOIN做什么,哪种类型合适?

我看过谷歌,但不知道从哪里开始。

5 个答案:

答案 0 :(得分:2)

当你说你的结果为空时,你指的是没有产品的地方?

无论如何,如果您有空ID,因此产品没有结果,您也可以添加

where products.id is not null

或者,您可以将连接从左连接更改为刚连接,使其成为内连接

答案 1 :(得分:1)

SELECT * FROM buyers LEFT JOIN products USING (id) WHERE products.id IS NOT NULL

OR

SELECT * FROM buyers JOIN products USING (id)

使用JOIN仅会带来匹配的行,因为LEFT JOIN会带来所有买家,无论产品中是否存在任何匹配项,并在之后过滤记录。我对您的情况并不完全确定,但使用JOIN代替LEFT JOIN

对我来说似乎更简单

答案 2 :(得分:1)

通过说你想忽略NULL结果到底是什么意思?你是说当你的左连接执行时,你会得到一些买家哪个是,其中产品(如果他们买了一些)?

在这种情况下,您正在寻找的是一个内部联接,只显示其他匹配的值。

答案 3 :(得分:1)

你会使用INNER JOIN(如果我的问题是正确的)。

有关MySQL中JOIN类型的概述,请参阅http://dev.mysql.com/doc/refman/5.1/en/join.html

答案 4 :(得分:0)

如果您想忽略空结果,只需使用INNER JOIN,就不需要LEFT JOIN
将您的查询更改为:

SELECT * FROM buyers JOIN products USING (id)