2012-10-30 58 views
0

我有以下查询提取:更新MySQL的行与价值从另一个计数表

SELECT int_intrebari.id, COUNT(id_raspuns) AS nr_raspunsuri 
FROM int_intrebari, int_raspunsuri 
WHERE int_intrebari.id = int_raspunsuri.id 
GROUP BY id 

是否可以更新第一表从查询nr_raspunsuri,而无需编写foreach语句?

+1

你要哪列更新? – Passerby

+0

int_intrebari我想更新选择的计数。 –

回答

2

您可以用UPDATEJOIN如此:

UPDATE int_intrebari i1 
INNER JOIN 
(
    SELECT id, COUNT(id_raspuns) AS nr_raspunsuri 
    FROM int_intrebari 
    GROUP BY id 
) i2 ON i1.id = i2.id 
SET i1.nr_raspunsuri = i2.nr_raspunsuri 
+0

您能否提供确认这是有效语法的链接?因为[MySQL手册](http://dev.mysql.com/doc/refman/5.0/en/update.html)表明这种语法应该会导致错误。 – Vyktor

+0

@Vyktor这是正确的语法。看看[这个SQLFiddle](http://sqlfiddle.com/#!2/a426a7/1) – hims056

+0

@Vyktor - 手册中的'UPDATE'语法表明表引用直接在'UPDATE'子句后面'UPDATE [LOW_PRIORITY] [IGNORE] table_reference ...',所以它应该是'UPDATE nt_intrebari i1 INNER JOIN ...''其中'nt_intrebari i1 INNER JOIN ...'是表引用。这我如何理解它。 –

0
UPDATE 
    (SELECT int_intrebari.id, COUNT(id_raspuns) AS nr_raspunsuri 
    FROM int_intrebari, int_raspunsuri 
    WHERE int_intrebari.id = int_raspunsuri.id 
    GROUP BY id) t1, 
    int_raspunsuri t2 
SET 
    t2.nr_raspunsuri=t1.nr_raspunsuri 
WHERE 
    t1.id=t2.id 
+0

我不明白这将是一个艰难的时刻,因为默认情况下,mysql对所有关键字都是不区分大小写的 – AnandPhadke

1

你可以不喜欢它 -

update int_intrebari left join int_raspunsuri on int_intrebari.id =int_raspunsuri.id 
set int_intrebari.column_to_update = int_raspunsuri.column_from_update_second_table