我正在修补SQL,因为我正试图进入更复杂的语句。我不知道这是否有资格,但请指导如何去做。
我查看了JOINS和一些多选语句的问题,但无法正确理解它们。
我有以下两个表:
emp表:
emp_id, name, address, org_id
书籍表:
id, emp_id, status, org_id
其中books表中的emp_id
是引用emp表的外键。
我需要从特定组织的书籍表中获取所有记录。但与此同时,我需要获得相应员工的所有数据,如名称,地址以及结果。
请指导我正确的方向。
由于
答案 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