我希望更新同一个表的某些行.据我所知,以下形式在MySQL下不起作用
UPDATE footbl SET foocol=something WHERE foocol in (SELECT ft.foocol ... bla bla )
Run Code Online (Sandbox Code Playgroud)
MySQL论坛的一篇帖子暗示:使用子查询.
所以我的解决方案是:
SELECT @data:=f2.fname ... bla bla
UPDATE tfile2 SET fstatus='deleted' WHERE tfile2.fname=(@data);
Run Code Online (Sandbox Code Playgroud)
但是,不幸的是,如果子查询@data占用多行,那么在我的情况下只更新一行.!看看这张照片!
那么,我错了什么,如何在同一个表上更新多行?
感谢您的努力和提前的时间.
乔鲍
我正在使用Postgresql与SQLAlchemy,但似乎sqlalchemy在使用子查询时添加行时遇到问题.
在我的示例中,我想更新表中特定标记的计数器.
在SqlAlchemy中,测试运行类如下所示:
class TestRun( base ):
__tablename__ = 'test_runs'
id = sqlalchemy.Column( 'id', sqlalchemy.Integer, sqlalchemy.Sequence('user_id_seq'), primary_key=True )
tag = sqlalchemy.Column( 'tag', sqlalchemy.String )
counter = sqlalchemy.Column( 'counter', sqlalchemy.Integer )
Run Code Online (Sandbox Code Playgroud)
然后,插入代码应如下所示:
tag = 'sampletag'
counterquery = session.query(sqlalchemy.func.coalesce(sqlalchemy.func.max(TestRun.counter),0) + 1).\
filter(TestRun.tag == tag).\
subquery()
testrun = TestRun()
testrun.tag = tag
testrun.counter = counterquery
session.add( testrun )
session.commit()
Run Code Online (Sandbox Code Playgroud)
这个问题是,在运行此代码时它会产生一个非常有趣的错误,它正在尝试运行以下SQL查询:
'INSERT INTO test_runs (id, tag, counter)
VALUES (%(id)s,
%(tag)s,
SELECT coalesce(max(test_runs.counter), %(param_1)s) + %(coalesce_1)s AS anon_1
FROM test_runs
WHERE test_runs.tag = %(tag_1)s)'
{'coalesce_1': …Run Code Online (Sandbox Code Playgroud) SELECT
upd.*,
usr.username AS `username`,
usr.profile_picture AS `profile_picture`
,(
SELECT COUNT (like.id)
FROM likes as like
WHERE upd.update_id = like.item_id
AND like.uid = 118697835834
) as liked_update
FROM updates AS upd
LEFT JOIN users AS usr
ON upd.uid = usr.uid
WHERE upd.deleted=0
AND
( upd.uid=118697835834
OR EXISTS ( SELECT *
FROM subscribers AS sub
WHERE upd.uid = sub.suid
AND sub.uid = 118697835834
)
)
ORDER BY upd.date DESC
LIMIT 0, 15
Run Code Online (Sandbox Code Playgroud)
子查询SELECT返回以下错误:
You have an error in your …Run Code Online (Sandbox Code Playgroud) 我有一个包含其规格产品的表。我在http://sqlfiddle.com/#!2/15575/1中创建了一个数据样本。我想要创建搜索表单,以便用户可以按其规格搜索产品。用户搜索具有RAM = 2和VGA = 512或VGA = 1的笔记本电脑。我写了一个查询,但是没有用。请帮助我。这个例子:结果:1525,1535,k5,k6

我正在浏览AskTom网站,发现什么应该是一个非常强大的更新状态工具,但我的声明拒绝接受子查询后的别名.有人可以帮我解释一下,并可能显示一个解决方案吗?
Update (SELECT T.Date_,T.Name_
FROM TableA T, TableB P
WHERE P.Date_ = T.Date_
AND P.Name_ = T.Name_) SET P.ID = T.Name_
Run Code Online (Sandbox Code Playgroud)
关于如何运行此类更新可能存在其他问题,这将是一个奖励.在尝试理解别名问题时,我对此更感兴趣.我试图分入
TableB.ID = TableA.Name_
Run Code Online (Sandbox Code Playgroud)
但没有运气
具体来说错误是ORA-00904无效的标识符.
一如既往地提前感谢.
上面的问题已经回答了我,但我确实有其他一些,因为我试图理解它.
我现在得到ORA-01779无法修改映射到非密钥保留表的列.我认为这是指我正在尝试更新正确的表格?因为我可以从视图或任何其他可能没有pk或fk的适当来源更新.
这种类型的更新语句可以与Oracle临时表一起使用,还是我可以预料到问题?
我可以将这种类型的语句与case语句一起使用来更新TableA中的多个列,还是会出现问题?
再次感谢.
只是在SQL Server中使用子查询(我知道这个问题不必用子查询完成,但我想知道我的语法问题在哪里)
select count(*) from
( select id, totalcharges from tblVisits where (totalcharges <10000))
Run Code Online (Sandbox Code Playgroud) 运行此查询需要很长时间:
SELECT host,ip FROM arecords WHERE ip IN
(SELECT ip FROM arecords GROUP BY ip HAVING COUNT(ip)>1 )
;
Run Code Online (Sandbox Code Playgroud)
(在我的arecords表中,有时IP上有多个主机.对于这些情况,我想得到主机名+ ip)
我觉得子查询运行了很多次.如果我运行子查询,取结果,并用这些结果替换子查询,它很快.我发现我可以通过使用视图来避免这种情况.
有没有办法用一个查询做到这一点?
[示例SQL结果我想要的结果:http://sqlfiddle.com/#!2/6c1bd/1/0 ]
我正在尝试insert使用子查询,但这insert失败了:
insert into
TABLE_A(COL_A, COL_B, COL_C, COL_D, COL_E, COL_F)
values (
1,
(select COL_B from TABLE_B where user_name = 'foo'),
(select COL_C from TABLE_C where age = 25),
2,3,4);
Run Code Online (Sandbox Code Playgroud)
我试着写不同但它仍然失败.
我在创建查询以从3个表中提取数据时遇到了麻烦.
我有一个job_skus桌子,skus桌子和stage桌子,我试图选择整个月jobNo的所有工作skus,例如显示4月份所有工作skus的列表.
表的结构是
Job_Sku example data
JobNo J4454 J4454
Sku (refences Product.Sku) 93339 9947
Quantity 500 600
Stage 1 2
Products
Sku(primary key) 93339 9947
Description Galvanised Nails Steel Rods 900mm
Stage
jobNo J4454 J4454
stage 1 2
date 04/04/2015 12/04/2015
Run Code Online (Sandbox Code Playgroud)
等等.
我想出了这个问题
SELECT jm.sku,jm.quantity,p.description
FROM stage as s, products as p, job_sku as jm
WHERE s.Date BETWEEN '2015-04-01' AND '2015-04-30'
AND jm.stage = s.stage AND p.sku = jm.sku
Run Code Online (Sandbox Code Playgroud)
但它似乎在查询中获取重复数据.我是否需要使用某种类型的连接,或者可能提取该日期的所有阶段并将结果加入到job_sku表中?
如果返回的一个值没有返回任何行,那么有很多关于如何返回NULL的问题.但是,当没有返回结果时,我没有发现任何关于多值查询返回NULL的信息.
主要查询:
SELECT UserOpinion.*, x, y, z... FROM subquery, (x) AS x, (y) AS y...
I trust you get the gist.
Run Code Online (Sandbox Code Playgroud)
我的查询是一个子查询:
(SELECT TOP 1
u.BADId,
Date,
State,
Note,
Comment,
Alias,
Title,
UserId,
o.Id AS OpinionId
FROM
[Opinion] o
RIGHT JOIN
[User] u
ON
o.UserId = u.Id
WHERE
(Date IS NULL OR (Date = (SELECT MAX(Date)
FROM [Opinion]
WHERE UserId = o.UserId )))
AND
u.BADId = 'myvalue') AS UserOpinion;
Run Code Online (Sandbox Code Playgroud)
例如,我尝试过以下方法:
(SELECT TOP 1 * FROM (SELECT TOP 1
u.BADId,
Date, …Run Code Online (Sandbox Code Playgroud)