我有两个表Employee和Department以下是两个表的实体类
Department.java
@Entity
@Table(name = "DEPARTMENT")
public class Department {
@Id
@Column(name = "DEPARTMENT_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer departmentId;
@Column(name = "DEPARTMENT_NAME")
private String departmentName;
@Column(name = "LOCATION")
private String location;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "department", orphanRemoval = true)
@Fetch(FetchMode.SUBSELECT)
//@Fetch(FetchMode.JOIN)
private List<Employee> employees = new ArrayList<>();
}
Employee.java
@Entity
@Table(name = "EMPLOYEE")
public class Employee {
@Id
@SequenceGenerator(name = "emp_seq", sequenceName = "seq_employee")
@GeneratedValue(generator = "emp_seq")
@Column(name = "EMPLOYEE_ID")
private Integer employeeId;
@Column(name = "EMPLOYEE_NAME")
private String …Run Code Online (Sandbox Code Playgroud) 我的工作之一就是维护我们的数据库,通常我们在获取报告和工作时会遇到性能不足的麻烦.
当我开始查看我们的ERP发送到数据库的查询时,我在主查询中看到了很多完全不必要的子查询.
因为我不是我们使用的程序创建者的开发人员,所以当我批评他们的代码和工作时,他们并不喜欢.让我们说他们不把我的评论作为严肃的陈述.所以我问你几个关于SQL中subselect的问题
subselect是否需要花费更多时间才能留下外连接?
是否存在任何博客,文章或我推荐不使用的任何内容?
我怎样才能证明,如果我们在查询中避免使用subselesct查询会更快?
我们的数据库服务器是MSSQL2005
我想显示EMPLOYEES表中所有员工的姓名,他们正在从表中处理三个以上的项目PROJECT.
PROJECTS.PersonID是一个外键引用EMPLOYEES.ID:
SELECT NAME, ID
FROM EMPLOYEES
WHERE ID IN
(
SELECT PersonID, COUNT(*)
FROM PROJECTS
GROUP BY PersonID
HAVING COUNT(*) > 3
)
Run Code Online (Sandbox Code Playgroud)
我可以在子查询中同时拥有两者PersonID,COUNT(*)还是只能有一列?
我一直在提问,以获得我公司要求的SQL查询的最终结果.我终于得到了最初要求的最终结果,但他们想要更多.
我的公司希望我使查询仅显示带有移动的值(已售出,已购买或已调整).我不知道如何使这项工作,或在哪里看.
SET ARITHABORT OFF
SET ANSI_WARNINGS OFF
SELECT
[UPC]=t1.F01,
COALESCE((SELECT SUM (COALESCE (X.F64, 0)) FROM [STORESQL].[dbo].[RPT_ITM_D] X WHERE (X.F254>='2011-10-1' and X.F254<='2011-11-11') and (X.F1034 = 3) AND X.F01 = T1.F01 Group by X.F01,X.F1034),0) AS [Total QTY Sold],
COALESCE((SELECT SUM (COALESCE (X.F65, 0)) FROM [STORESQL].[dbo].[RPT_ITM_D] X WHERE (X.F254>='2011-10-1' and X.F254<='2011-11-11') and (X.F1034 = 3) AND X.F01 = T1.F01 Group by X.F01,X.F1034),0) AS [Total Amount Sold],
COALESCE((SELECT SUM (COALESCE (X.F1301, 0)) FROM [STORESQL].[dbo].[RPT_ITM_D] X WHERE (X.F254>='2011-10-1' and X.F254<='2011-11-11') and (X.F1034 = 3) …Run Code Online (Sandbox Code Playgroud) 我有一个非常普通的表,带有另一个表的外键; 例如:
CREATE TABLE table_a (
id serial NOT NULL,
name text,
CONSTRAINT table_a_pkey PRIMARY KEY (id)
);
CREATE TABLE table_b (
id serial NOT NULL,
a_id integer, -- The foreign key
CONSTRAINT table_b_pkey PRIMARY KEY (id),
CONSTRAINT table_b_a_id_fkey FOREIGN KEY (a_id)
REFERENCES table_a (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
INSERT INTO table_a
VALUES (1, 'First row');
-- 2 entries in table_b which refer to the existing table_a row:
INSERT INTO table_b
VALUES (11, …Run Code Online (Sandbox Code Playgroud) 我有3列的表:id(人),城市(访问过的人)和日期(他的访问).我需要选择在特定日期之间在洛杉矶市的所有人(他们的ids),他们也在其他特定日期在纽约市.
以下是我现在运行的查询示例:
SELECT DISTINCT id
FROM places
WHERE date >= '2011-03-18' AND
date < '2011-03-19' AND
city = 'los angeles' AND
id IN (SELECT DISTINCT id
FROM places
WHERE date >= '2011-03-15' AND
date < '2011-03-16' AND
city = 'chicago'
GROUP BY id);
Run Code Online (Sandbox Code Playgroud)
还有什么我也可以吗?我可以使用其他任何查询吗?这个选择太慢了.
我有一组表:
我有一个用户表:
在这种情况下,用户只会在一个组中.那么,在MySQL中,我如何列出组及其成员用户数?
我尝试使用subselect和count,但它最终显示所有组的相同计数.
有一个账单清单,我想知道按 ID 分组的每个客户的销售量。每张账单都有一个负责人(一个店员,要么是餐桌上的顾客),所以我想把最后一张账单的人接起来,放在结果中。
结果应该是这样的:客户 - 账单总和 - 最后一张账单的负责人。
由于 Oracle 没有“限制”选项(我们还没有 12c),我必须使用 Subselect 来完成。这意味着我无法比较客户的 ID,因为它超出了范围(请参阅下面的代码)。欢迎任何建议。
SELECT customer.NAME, SUM(bills.SUME),
(SELECT responsibleP FROM
(SELECT responsibleP FROM bills b WHERE b.responsibleP = customer.id
order by asc billDate)
WHERE ROWNUM = 1)
FROM customer, bills
WHERE customer.id = bills.customerid
GROUP BY customer.id;
Run Code Online (Sandbox Code Playgroud)
在这种情况下b.responsible是不是能够得到customer.id从客户表。
请随意更改标题,我不是很擅长那个,对不起!