我需要有关MySQL中子选择性能的建议.由于我无法更改的原因,我无法使用JOIN创建问题过滤器,我只能在WHERE中添加另一个AND子句.
什么是以下表现:
select tasks.*
from tasks
where
some criteria
and task.project_id not in (select id from project where project.is_template = 1);
Run Code Online (Sandbox Code Playgroud)
相比:
select tasks.*
from tasks, project
where
some criteria
and task.project_id = project.id and project.is_template <> 1;
Run Code Online (Sandbox Code Playgroud)
请注意,is_template = 1的项目数量相对较少,并且可能存在大量项目,其中is_template <> 1.
如果我不能改变除过滤器之外的任何东西,还有其他方法可以在没有子选择的情况下实现相同的结果吗?
我有一个表delete_requests,其中我存储了我的users表条目的删除请求的id.是否可以使用delete_requests中的信息作为条件从用户中删除?
我的问题是,结果集通常不会限制在一行,而是返回几行.
DELETE FROM users WHERE id=(SELECT id FROM delete_requests)
Run Code Online (Sandbox Code Playgroud)
所以MySQL抱怨:
#1242 - Subquery returns more than 1 row
Run Code Online (Sandbox Code Playgroud)
这可以在一个语句中完成而不将逻辑放入正在执行的应用程序中吗?
我正在尝试删除一些行,但目前还没有成功.
DELETE FROM product_pictures
WHERE picture = (SELECT picture FROM product_pictures WHERE id = ?)
Run Code Online (Sandbox Code Playgroud)
您不能为update in FROM子句指定目标表'product_pictures'
我之前从未见过这个错误信息,也没有找到一些关于我做错的有用信息.
行的示例:
ID Picture
19 picture-grey.jpg
20 picture-grey.jpg
21 picture-grey.jpg
Run Code Online (Sandbox Code Playgroud) 如果使用带有子查询的select case语句将else语句改为单个查询,我需要更改以下过程...
if((select COUNT(*) from pseb.dbo.meterattributedetails where meterid=@meterid)=0)
select @emf=EMF from pseb.dbo.METERMASTER where MeterID=@meterid
else if((select COUNT(*) from pseb.dbo.meterattributedetails where meterid=@meterid and dateadd(day,1,@fromdate)<DateTime)>0)
select top 1 @emf=oldvalue from pseb.dbo.meterattributedetails where MeterID=@meterid and dateadd(day,1,@fromdate)<datetime order by DateTime
else
select top 1 @emf=newvalue from pseb.dbo.meterattributedetails where meterid=@meterid and DateTime<@fromdate order by DateTime desc
Run Code Online (Sandbox Code Playgroud)
meterattribute表结构如下:
AttributeID AttributeName Oldvalue newvalue DateTime meterid
1 EMF 2.00000 4.00000 2012-07-05 4756
1 EMF 4.00000 6.00000 2012-07-10 4756
1 EMF 6.00000 8.00000 2012-07-15 4756
1 EMF 8.00000 10.00000 …Run Code Online (Sandbox Code Playgroud) 我有一个子查询的查询,返回多行.
我有一个包含列表的表和一个包含用户的表.我在这两个表之间创建了一个多对多表,称为list_user.
LIST
id INTEGER
list_name TEXT
list_description TEXT
USER
id INTEGER
user_name TEXT
LIST_USER
id INTEGER
list_id INTEGER
user_id INTEGER
Run Code Online (Sandbox Code Playgroud)
我的子查询查询
SELECT * FROM user WHERE id = (SELECT user_id FROM list_user WHERE list_id = 0);
Run Code Online (Sandbox Code Playgroud)
子查询工作(我在代码中使用它,所以0实际上是一个变量),它返回多行.但是上层查询只返回一行,这很合乎逻辑; 我检查id是否等于某个东西,它只检查子查询的第一行.
如何更改我的语句,以便在上层查询中获得多行?
我有一个mysql数据库表,其中有一个电子邮件列,最多可以包含两个以分号分隔的电子邮件.我想要实现的是将电子邮件字段中的第二个电子邮件地址写入另一列电子邮件2这是我迄今为止尝试过的但没有成功:
UPDATE user AS u
SET email2 = (SELECT SUBSTRING_INDEX(email, ';', -1)
FROM user
WHERE user.id=u.id)
WHERE username LIKE "%;%"
Run Code Online (Sandbox Code Playgroud)
在搜索这个问题时,有一些解决方案在子查询中没有第二个子查询,但它们都没有真正匹配我的问题.
如果有人有解决方案,请发布.我被困在了2个小时.
非常感谢你.
我想运行此查询
INSERT INTO [tblPollLogs]
([lastModified]
,[ip]
,[a1]
,[a2]
)
VALUES
(getdate()
,'aaa'
,(select top 1 header from [tblPollAnswer] where [pollAnswerId] = @param1)
,(select top 1 header from [tblPollAnswer] where [pollAnswerId] = @param2)
)
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误
在此上下文中不允许子查询.只允许标量表达式.
我可以在一个查询中运行此查询,或者我需要在运行此查询之前获取值
谢谢
我无法将结果分组到子查询中.目前,我得到的结果只是给出每个crq_requested_by_company旁边的所有standard_crq的总和,而不是按crq_requested_by_company对它进行分组.
我有以下代码
SELECT crq_requested_by_company
,COUNT(crq_number) as 'count crqs'
,(SELECT count(crq_number) FROM change_information where crq_change_timing = 'Standard') as 'standard crqs'
FROM change_information
GROUP BY crq_requested_by_company
Run Code Online (Sandbox Code Playgroud)
我的结果看起来像这样.standard_crqs应该都小于每个crq_requested_by_company的总计数
crq_requested_by_company count standard_crqs standard_crqs(correct)
A 4 2824 3
B 2 2824 1
C 2269 2824 1745
D 7696 2824 3456
E 110 2824 56
F 91 2824 17
G 33 2824 23
H 295 2824 78
Run Code Online (Sandbox Code Playgroud)
如果我只是查询
SELECT count(crq_number)
FROM change_information
WHERE crq_change_timing = 'Standard'
GROUP BY crq_requested_by_company
Run Code Online (Sandbox Code Playgroud)
这完全没问题
我正在使用MySql数据库.我需要将多个(超过10个)表格中的信息合并为一个表格.为了做到这一点,我遵循典型的加入方式.
Select * from
table_1
Join table_2
on(table_1.id = table_2.id)
Join table_3
on(table_1.id = table_3.id)
Run Code Online (Sandbox Code Playgroud)
它有效,但在执行期间我受了很多苦.有没有其他好方法来优化我的代码?以下是我的代码示例:
SELECT
distinct
u.Id,
oc.dt,
Daily_Number_Outgoing_Calls,
Daily_Number_Incoming_Calls,
Daily_duration_Outgoing_Calls
FROM
creditfix.users u
JOIN
#1 Daily_No_Out_Calls
(
SELECT
cl.uId,SUBSTRING(DATE,1,10) as dt,
count(1) as Daily_Number_Outgoing_Calls
From creditfix.call_logs as cl
WHERE
cl.`type`=2 #out going calls only
GROUP by cl.uId,dt
) oc
ON (u.Id=oc.Uid)
#2 Daily_No_In_Calls
JOIN
(
SELECT
cl.uId, SUBSTRING(DATE,1,10) as dt,
count(1) as Daily_Number_Incoming_Calls
From creditfix.call_logs as cl
WHERE
cl.`type`=1 #incoming calls only
GROUP by cl.uId,dt
) ic …Run Code Online (Sandbox Code Playgroud) 如何在laravel雄辩的对象中选择字段
User::select('username', 'firstname', 'lastname')->with(['periods' => function($){
$->select('jobtitle')->orderBy('start_date', 'desc')->limit(1);
}])->paginate(50);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可能得到句点为空
subquery ×10
mysql ×5
sql ×5
sql-server ×3
android ×1
case ×1
count ×1
dbeaver ×1
delete-row ×1
eloquent ×1
group-by ×1
insert ×1
join ×1
laravel ×1
laravel-5 ×1
optimization ×1
relationship ×1
sqlite ×1