我有两张桌子。
首先有以下内容:
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
还有其他帮助吗?
答案 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
它的工作原理如下:
inner join
(来自second_table的company_id
和来自first_table的id
inner_join
,E.employee is not null
添加条件,根据没有员工的情况(可能为空字符串,可能为0,我不知道)进行调整编辑:
要仅获得公司的一个结果,请在最后添加:
GROUP BY C.company
但是你需要在
之前将C.company添加到SELECT中