还有更多,但有3张桌子......
employees
employee_id
licenses
license_id
employee_id
companies
company_id
employee_id
SELECT * FROM employees
LEFT JOIN licenses
ON employees.employee_id = licenses.employee_id
LEFT JOIN companies
ON employees.employee_id = companies.employee_id
GROUP BY employees.employee_id
我只能得到它所以许可证OR公司返回一个值而另一个返回NULL。我怎样才能得到它以便两个表返回值?看起来很简单,但在这种情况下不起作用,我无法弄清楚为什么......
编辑:这是一些更多的信息 并非每个员工都有执照 并非每个员工都有公司。
想要返回employee_id license_id (if exists, else NULL) company_id (if exists, else NULL)
以员工同时拥有license_id和company_id的情况为例。通过删除其中一个JOIN子句,可以返回相应的值。但是,当两者合并时,只返回company_id,license_id返回NULL。
很奇怪,对吗?有什么想法或需要更多信息吗?
DATA:
EMPLOYEE_ID
1
2
3
employee_id license_id
1 1
2 1
3 2
employee_id company_id
1 1
2 1
3 2
为了浪费时间而烦恼
表模式搞砸了,多余了。这是一个继承的架构,我只考虑SQL,而不是底层结构。数据库需要重组。
答案 0 :(得分:1)
如果不查看表格中的数据,这很难回答。所以我会假设,每个表中都有一些行都有一个相同的Employee_ID,因此连接起作用。在测试时我建议选择一个Employee_id来处理,只是为了在测试时简化输出。
根据我的假设,我将您的查询切换到内部联接,这只会显示在Employee_id上匹配的行。我也用过“别名”。我在每个表指针后放置的单个字母可以节省大量的输入。
SELECT *
FROM employees e
INNER JOIN licenses l
ON e.employee_id = l.employee_id
INNER JOIN companies
ON e.employee_id = c.employee_id
GROUP BY employee_id
如果您是SQL连接的新手,this article也可能会有所帮助。祝你好运!
答案 1 :(得分:0)
答案 2 :(得分:0)
有很多不同的JOIN
类型。我的建议是做一些关于它们的阅读来弄明白。您可以使用FULL OUTER JOIN
SELECT *
FROM employees
FULL OUTER JOIN licenses
ON employees.employee_id = licenses.employee_id
FULL OUTER JOIN companies
ON employees.employee_id = companies.employee_id
GROUP BY employee_id
如果没有看到任何数据,很难准确确定您想要的内容。但是这里有一个方便的SQL连接的可视化解释。我保留它的书签,以便我需要一些帮助。
http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html