如何离开join以选择with语句

时间:2016-02-19 06:48:08

标签: mysql select

我有一些表格:

 products
 --------------------------
|p_id|col|col...|...|cat_id|


 colors
  -----------
 |id|p_id|url|

我希望在连接到此结果后从第一个表中选择适当的行,然后通过apropiate id选择另一个列。

换句话说,我选择了一些导管上的所有产品以及每种产品有多少种颜色。

例如

select * 
from products p 
where p.p_id = some_number

并加入此

select count(*) 
from colors c 
where c.p_id = p.p_id

提前致谢

3 个答案:

答案 0 :(得分:1)

试试这个:

select p.p_id, count(*) as number_of_colours
from products as p
left join colors c on c.p_id=p.p_id
group by p.p_id

LEFT JOIN操作保证将返回表products的所有行。按p_id分组,我们为每个产品分别添加一行以及每个产品与之关联的颜色数。

答案 1 :(得分:1)

左连接返回左表(产品)的所有行,即使行的id与右表不匹配。了解更多信息click here

SELECT p.p_id, COUNT(*) AS colours_count
FROM products AS p
LEFT JOIN colors c 
ON c.p_id=p.p_id
GROUP BY p.p_id

答案 2 :(得分:0)

您可以执行LEFT JOIN,但请注意,无论右侧表格中是否存在匹配的行,这都会从左侧表格中返回一行。因此,没有匹配或1匹配,您仍然会返回1行。因此,如果您使用COUNT(*),您将获得1的计数。

因此,您可以通过右手表(通常是主键)计算字段的出现次数。像这样使用COUNT()返回非空字段的计数,所以当右边没有匹配的行时它将返回0: -

SELECT p.p_id, 
        COUNT(c.id) AS number_of_colours
FROM products p
LEFT OUTER JOIN colors c ON c.p_id = p.p_id
GROUP BY p.p_id