mysql查询where = value可能存在或不存在

时间:2016-12-14 00:18:16

标签: mysql sql select

您好我有关于MySQL查询的问题。

以下查询是我想得到的结果。

但是,thumb_file表格中的color_all列可能包含数据或NULL

    $query =  "SELECT DISTINCT(p.location), p.no, c.thumb_file FROM product_pics AS p, color_all AS c 
                WHERE style_number = '$style' AND p.color = c.color ORDER BY p.sort ASC";

实际上,我可以像以下两个查询一样进行此查询:

    $query = "SELECT DISTINCT(location), no, color FROM product_pics WHERE style_number = '$style' ORDER BY ASC";
    $result = mysql_query($query);
    while(list($loc, $no, $color) = mysql_fetch_array($result)){
          $sub_query = "SELECT thumb_file FROM color_all WHERE color = '$color'";
    }

但我只是想知道如何将这2个查询作为一个。

1 个答案:

答案 0 :(得分:1)

选择FROM多个表执行两者的连接,并且您的WHERE子句将过滤掉颜色不匹配的任何结果行,包括product_pics根本没有颜色信息的位置。这相当于INNER JOIN

SELECT DISTINCT(p.location), p.no, c.thumb_file
FROM product_pics AS p
INNER JOIN color_all AS c ON c.color = p.color
WHERE style_number = '$style'
ORDER BY p.sort ASC";

运行该查询,您应该看到与您现在完全相同的结果:只返回product_pics具有颜色且颜色在color_all中匹配的行。

您要查找的是OUTER JOIN,它不会过滤掉一行或另一行在连接列中具有空值的行。外连接有两种类型,LEFTRIGHT。前者是最常见的,因为通常会将查询从源表写入辅助表。此查询应该为您提供所需内容:

SELECT DISTINCT(p.location), p.no, c.thumb_file
FROM product_pics AS p
LEFT OUTER JOIN color_all AS c ON c.color = p.color
WHERE style_number = '$style'
ORDER BY p.sort ASC";