我有一个名为teachings
的表格:
id
,name
,description
和products
表:
id
,name
,description
,teachingID
我想从具有与之相关的产品的教义中选择所有内容。如果产品表中没有产品的教学,我不想要它。
到目前为止,我提出了:
SELECT * FROM `teachings`
LEFT JOIN `products` ON `products`.`teachingID` = `teachings`.`id`
WHERE COUNT(`products`) > 0
但那不起作用:(有人能指出我正确的方向吗?
答案 0 :(得分:3)
如果您只想返回与至少一个与之关联的产品的教学,请使用exists
子查询。这样您就无需按教学计算产品。
我的mysql
生锈但这应该
select *
from teachings t
where exists
(
select 1
from products p
where p.teachingID = t.id
)
答案 1 :(得分:1)
这是一个额外的答案,只是为了显示我在评论中讨论的IN子句。任务非常简单:获取存在产品记录的教学记录。换句话说:获取产品表中 中提到的教学记录。因此,在这里使用EXISTS
或IN
。
加入表格只会混淆正在做的事情,所以不要这样做。
EXISTS
查询:
select *
from teachings t
where exists (select * from products p where p.teachingid = t.id);
IN
查询,更具可读性,因为子查询与主查询无关:
select *
from teachings t
where id in (select teachingid from products p);