我有一些表格:
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
提前致谢
答案 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