【发布时间】:2019-02-06 18:39:18
【问题描述】:
我正在做一个辅助项目来帮助我学习 SQL。
我设置了 2 个不同的表:
computers
+------------------+-----------+------+-----+---------+-------+
│| Field | Type | Null | Key | Default | Extra |
│+------------------+-----------+------+-----+---------+-------+
│| serial_number | char(25) | NO | PRI | NULL | |
│| operating_system | char(10) | YES | | NULL | |
│| purchase_year | int(4) | YES | | NULL | |
│| assigned_to | char(100) | YES | | NULL | |
│+------------------+-----------+------+-----+---------+-------+
employees
│+------------+-----------+------+-----+---------+-------+
│| Field | Type | Null | Key | Default | Extra |
│+------------+-----------+------+-----+---------+-------+
│| email | char(100) | NO | PRI | NULL | |
│| first_name | char(25) | NO | | NULL | |
│| last_name | char(25) | NO | | NULL | |
│| office | char(5) | NO | | NULL | |
│| assigned | char(25) | YES | | NULL | |
│+------------+-----------+------+-----+---------+-------+
在我进行测试时,它们都有一些条目,但是在尝试根据员工电子邮件编写搜索功能时,我遇到了 SQL 查询的障碍。我正在翻阅文档,但没有很好地理解它,也找不到一个很好的例子来说明我正在尝试做的事情。
这是我尝试对查询执行的操作: 我想获取与提供的电子邮件地址匹配的员工行,如果设置了“employees.assigned”字段(不为空,认为使用了 EXIST?),那么我还想获取“computers.serial_number”行匹配该列值
我可以用 2 个单独的查询来做我想做的事,但我想看看是否可以只用一个来清理代码并使查询尽可能快。也非常欢迎您认为对这个项目有价值的任何进一步文档!
【问题讨论】:
-
应该提到与mysql一起工作的代码语言是PHP
-
有点不清楚分配的列是如何链接两个表的,但您可能正在寻找外连接,它不需要另一个表匹配并且会为其列返回空值如果没有匹配。
-
链接是 employees.assigned 将包含计算机的序列号。
-
@SamiKuhmonen 这是我现在正在尝试的选择查询,但出现语法错误:SELECT * FROM employees FULL OUTER JOIN computer ON employees.assigned=computers.serial_number;
-
我意识到完全外连接可能是错误的使用,似乎它从阅读文档中返回所有内容 /*EDIT*/ YES,使用左或右给我一些结果。现在我需要缩小查询范围,只给出我想要的字段