繁体   English   中英

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

[英]SQL SELECT Statement for selecting data from two tables using foreign key

当我尝试进入更复杂的语句时,我只是在修改SQL。 我不知道这是否符合条件,但请指导如何进行。

我看过JOINS和多个选择语句的问题,但无法正确理解它们。

我有以下两个表:

emp表

emp_id, name, address, org_id

书桌

id, emp_id, status, org_id

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

我需要从特定组织的books表中获取所有记录。 但是与此同时,我需要获取结果中各个员工的所有数据,例如姓名,地址。

请指引我正确的方向。

谢谢

尝试这个

select B.*,E.name,E.address from books B
     inner join employee E 
     on B.emp_id=E.emp_id 
     where B.org_id=1;

为了测试目的,我将org_id值设为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

这将是对组织100的查询。

看来您当前的架构未很好地标准化:

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

这两个表都存储org_id ,这大概意味着同一件事。

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表的org_id毫无意义。 您必须将其从表中删除。

如果要从books表中获取所有记录,请尝试此

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'

您可以使用此查询,这将为您提供所有具有特定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'

该查询可以为您提供所需的结果。 您可能想了解有关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=?

您可以将所有表的所有记录器都使用此命令:

从books.emp_id = emp.emp_id上的书籍内部加入emp中选择*,其中books.emp_id = emp.emp_id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM