SQL SELECT语句,用于使用外键从两个表中选择数据

时间:2015-09-09 06:07:22

标签: php mysql sql

我正在修补SQL,因为我正试图进入更复杂的语句。我不知道这是否有资格,但请指导如何去做。

我查看了JOINS和一些多选语句的问题,但无法正确理解它们。

我有以下两个表:

emp表

emp_id, name, address, org_id

书籍表

id, emp_id, status, org_id

其中books表中的emp_id是引用emp表的外键。

我需要从特定组织的书籍表中获取所有记录。但与此同时,我需要获得相应员工的所有数据,如名称,地址以及结果。

请指导我正确的方向。

由于

6 个答案:

答案 0 :(得分:1)

以下查询适合您:

SELECT b.id, b.status, b.org_id, e.emp_id, e.name, e.address
FROM Books b LEFT JOIN Employee e
ON e.emp_id = b.emp_id
WHERE b.org_id = 100

这是org 100的查询。

您的当前架构似乎没有很好地规范化:

Employee: emp_id, name, address, org_id
Books:    id, emp_id, status, org_id

这两个表都存储org_id,这可能意味着同样的事情。

答案 1 :(得分:1)

SELECT books.id, books.emp_id, books.status, books.org_id, emp.name, emp.address
FROM books
JOIN emp ON emp.emp_id = books.emp_id
WHERE books.org_id = '3'

正如另一个所说,来自org_id表的emp毫无意义。您必须将其从表格中删除。

答案 2 :(得分:1)

如果你想要书籍表中的所有记录试试这个

Select b.id,c.emp_id,b.status,e.name,e.address
from emp_table e
Left join books_table b
on(e.emp_id=b.emp_id)
where e.org_id='3' and b.org_id='3'

答案 3 :(得分:1)

您可以使用此查询,这将为您提供包含特定org_id以及所有员工记录的所有图书记录

SELECT * FROM emp as e1
LEFT JOIN books as b1 ON e1.emp_id = b1.emp_id WHERE e1.org_id = 'YOUR_ID'
UNION ALL 
SELECT * FROM emp as e1
RIGHT JOIN books as b1 ON e1.emp_id = b1.emp_id WHERE e1.org_id = 'YOUR_ID'

答案 4 :(得分:1)

此查询可能会为您提供所需的结果。您可能希望了解有关SQL中连接的更多信息。 LEFT JOIN为您提供一个表中的所有记录,以及来自另一个表的匹配记录。

SELECT books.*,
    emp.name AS emp_name,
    emp.address AS emp_address,
    emp.org_id AS emp_org_id
FROM books
    LEFT JOIN emp ON books.emp_id = emp.emp_id
WHERE books.org_id=?

答案 5 :(得分:0)

你可以将它用于所有recors两个表:

从书本中选择* 内联盟  books.emp_id = emp.emp_id  books.emp_id = emp.emp_id