![](/img/trans.png)
[英]SQL SELECT statement to pull data from multiple tables with foreign keys and associative relationships
[英]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.