您好我有关于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个查询作为一个。
答案 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
,它不会过滤掉一行或另一行在连接列中具有空值的行。外连接有两种类型,LEFT
和RIGHT
。前者是最常见的,因为通常会将查询从源表写入辅助表。此查询应该为您提供所需内容:
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";