2017-03-16 118 views
0

我目前是一名学生,我正试图解决SQL的一个小问题。我想根据来自同一个表的过滤结果在表上执行更新语句。 Here is the table I have:SQL更新语句与where子句中的子查询相同的表

这是查询我到现在:

UPDATE ComplexityLessons 
SET ACADEMYRATIO = '0,896' 
WHERE (
    SELECT c.START, c.DATE, c.ACTIVITY, c.ACADEMY 
from ComplexityLessons c 
join (
    SELECT b.ACTIVITY, b.START, b.DATE 
    FROM ComplexityLessons b 
) as b 
on c.ACTIVITY = b.ACTIVITY and c.DATE = b.DATE and c.START = b.START 
having COUNT(DISTINCT ACADEMY) = 2) 

所以,总结我想更新列“ActivityRatio”仅在2所院校在同一时间进行同样的活动。当我仅使用子查询时,我得到了同时执行相同活动的院校,但我无法弄清楚更新声明。 预先感谢您的帮助!

+1

您使用MySQL,MS SQL Server或Oracle吗?不要标记不涉及的产品! – jarlh

+0

@jarlh:我使用phpmyadmin,所以MySQL。 –

回答

0
UPDATE ComplexityLessons SET ACADEMYRATIO = '0,896' 
WHERE (SELECT c.START, c.DATE, c.ACTIVITY, c.ACADEMY 
     from ComplexityLessons c 
join (SELECT b.ACTIVITY, b.START, b.DATE 
     FROM ComplexityLessons b) as b 
on c.ACTIVITY = b.ACTIVITY and c.DATE = b.DATE and c.START = b.START 
having COUNT(DISTINCT ACADEMY) = 2) 

在哪里应该有条件和子查询应该返回ID。 例如

UPDATE ComplexityLessons SET ACADEMYRATIO = '0,896' 
WHERE <id> in (SELECT <id> from ComplexityLessons c 
join (SELECT b.ACTIVITY, b.START, b.DATE 
     FROM ComplexityLessons b) as b 
on c.ACTIVITY = b.ACTIVITY and c.DATE = b.DATE and c.START = b.START 
having COUNT(DISTINCT ACADEMY) = 2) 

的应该是表之间的foriegn键。

+0

我试过了,但它仍然给我错误“操作数应该只包含一列” –

+0

请提供您使用的最新查询。 –

+0

UPDATE ComplexityLessons SET ACADEMYRATIO ='0,896'WHERE ACTIVITY IN(SELECT c.START,c.DATE,c.ACTIVITY,c.ACADEMY from ComplexityLessons c join(SELECT b.ACTIVITY,b.START,b.DATE FROM ComplexityLessons b)作为b对c.ACTIVITY = b.ACTIVITY和c.DATE = b.DATE和c.START = b.START有COUNT(DISTINCT ACADEMY)= 2)@Sambi Reddy –