Mysql:只有子表有行时才从父表中选择

时间:2018-05-28 23:01:20

标签: php mysql mysqli

我需要你的帮助, 我如何从父表中选择,仅当子表(另一个依赖于父表的id的表)在php中有行?

例如: 我有com.mysql.jdbc.Driver 表和CATEGORY表。其中Items是父表并包含Category,而ct_id, ct_name是子表,其中包含Items(链接到父表),it_id, ct_id

PS:我不需要选择项目,但如果有与此表相关联的项目,我只需要类别。

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用INNER JOIN,它只会在两个表都匹配时返回记录。

SELECT DISTINCT a.* FROM Categories a INNER JOIN Items b on b.ct_id = a.ct_id

但运行子查询更有效:

SELECT *
FROM Categories 
WHERE ct_id IN (SELECT ct_id FROM Items);

这是因为在第一个示例中,它必须首先匹配整个表,然后使用DISTINCT关键字删除所有重复项。第二个示例通过首先扫描子表来避免重复。

这称为Semi Join。有关详细信息,请参阅此处:https://dev.mysql.com/doc/refman/5.6/en/semi-joins.html