满足条件的PHP查询必须存在于第二个表中

时间:2018-03-23 16:29:04

标签: php mysql

我有两张桌子。

首先有以下内容:

id | Company       | Field  | Country
-------------------------------------
1  | Widgets Inc   | Parts  | USA   
2  | Moo Corp      | Toys   | GBR   
3  | Dingles S.A   | Music  | GER   
4  | Deutsh Import | Import | AUT   
5  | Clean Inc     | Clean  | USA   

和第二个表

id | Employee     | Company_id | Country
----------------------------------------
1  | Paul Allen   | 2          | USA   
2  | Andrew Cur   | 2          | GBR   
3  | Paul Hanz    | 4          | GER   
4  | Angela Dow   | 1          | AUT   
5  | Dana Loconto | 4          | USA   

我想过滤(php上的mysql查询)第一个表,只有在第二个表上实际拥有员工的公司。没有雇员的人应该被忽视。

感谢您的建议

编辑:使用INNER JOIN似乎解决了这个问题,但后来我遇到了另一个问题。 如果我按照下面的建议使用INNER JOIN,它会在每次出现连接表时出现一个结果。

例如:使用下面的表格,它将返回公司ID 2两次,id 4两次。为了更好地解释,我使用它来生成实际拥有员工的公司列表,但每次找到同一公司的新员工时,我都不需要它重复自己。不确定我是否清楚自己。

SELECT C.id, C.field, C.country
FROM first_table as C
INNER JOIN second_table as E ON E.company_id = C.id

返回以下内容

Moo Corp       | Toys   | USA
Moo Corp       | Toys   | USA
Deutsch Import | Import | AUT
Widgets Inc    | Parts  | USA
Deutsch Import | Import | AUT

我所期待的只是

Moo Corp
Deutsch Import
Widget Inc

还有其他帮助吗?

1 个答案:

答案 0 :(得分:1)

尝试内部联接:

SELECT C.id, C.field, C.country
FROM first_table as C
INNER JOIN second_table as E ON E.company_id = C.id AND E.employee is not null

或者根据评论中的建议,如果有员工的second_table数据仅在有公司时才存在:

SELECT C.id, C.field, C.country
FROM first_table as C
INNER JOIN second_table as E ON E.company_id = C.id

它的工作原理如下:

  • 您选择所需的元素(此处仅来自table_one的元素)
  • 您根据公共字段制作inner join(来自second_table的company_id和来自first_table的id
  • 您在inner_joinE.employee is not null添加条件,根据没有员工的情况(可能为空字符串,可能为0,我不知道)进行调整
  • 内部联接将使您只返回尊重此条件的元素

编辑:

要仅获得公司的一个结果,请在最后添加:

GROUP BY C.company

但是你需要在

之前将C.company添加到SELECT中