2017-06-02 109 views
0

我想更新表中的列,並且我想要放入的數據是使用引用更新表的subquerys的數學運算的結果。如何使用來自同一個表的數據來更新子表查詢

問題是我想在上面提到的數學運算中使用來自同一行的數據更新每一行。

這裏的例子:

 

    UPDATE licenses as lic 
    SET lic.numSessions = 
    (
    select difference from 
    (select 
    (
    select (p.numSessions * p.numMonth) as num from products p 
    inner join licenses l on p.idProduct = l.idProduct and l.idpatient = lic.idPatient and l.currentLicense = 1 
    ) 
    - 
    (
    SELECT COUNT(distinct s.idSession) as num 
    FROM sessions s 
    WHERE s.idPatient = lic.idPatient 
    AND s.dateValue >= (select l.dateCreated from licenses l where l.idPatient = lic.idPatient and l.currentLicense = 1) AND s.status = 2 
    ) 
    as difference 
    ) 
    x 
    ); 

編輯:我想要什麼

例子:

'許可證' 的 'idPatient' 的每一行。我們稱之爲'X'。

我想查看X所完成的會話數量(例如10),然後從'X's'產品會話總數(例如50)中減去此數字。所以在X更新的結果將是:50 - 10 = 40.

子查詢單獨工作完美,我有50的價值,那麼價值10,然後當我試圖減去我有值40作爲名爲「差異」的列。

我有問題是,查詢無法識別值「lic.idPatient」的第一個子查詢內的操作。減去:

 

    /* SQL Error (1054): Unknown column 'lic.idPatient' in 'on clause' */ 

在此先感謝和抱歉,我寫作,我不是英語母語。

+0

編輯您的問題,並提供樣本數據和期望的結果。 –

回答

0

你必須寫這樣的查詢

UPDATE licenses AS licNew 
    SET licNew.numSessions = 
    (
    SELECT x.difference FROM 
    ((SELECT 
    (
    SELECT (p.numSessions * p.numMonth) AS num FROM products p 
    INNER JOIN licenses l ON p.idProduct = l.idProduct AND l.idpatient = lic.idPatient AND l.currentLicense = 1 
    ) 
    - 
    (
    SELECT COUNT(DISTINCT s.idSession) AS num 
    FROM sessions s 
    WHERE s.idPatient = 6361 
    AND s.dateValue >= (SELECT l.dateCreated FROM licenses l WHERE l.idPatient = 6361 AND l.currentLicense = 1) AND s.status = 2 
    )) 
    AS difference, lic.idPatient 
    FROM licenses lic 
    ) 
    X WHERE licNew.idPatient = x.idPatient 
    ); 

一般情況下,你不能修改一個表,然後從子查詢相同的表中選擇。

請參閱link

相關問題