我有一个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做什么,哪种类型合适?
我看过谷歌,但不知道从哪里开始。
答案 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)