1

私はこのような選択クエリを持っています:

SELECT n.nid, n.title, n2.nid, n2.title, n2.type
FROM node n
    JOIN og_ancestry o ON n.nid = o.group_nid
    JOIN node n2 ON n2.nid = o.nid 
    JOIN og_access_post a ON o.nid = a.nid
    JOIN content_type_group c ON n.vid = c.vid 
WHERE n.type = 'group'
    AND a.og_public = 1
    AND c.field_tyyppi_value != 'type1'

これを更新クエリに変換する方法がわかりません。私はこのように試しました:

UPDATE og_access_post a
    SET a.og_public = 0
FROM node n
    JOIN og_ancestry o ON n.nid = o.group_nid
    JOIN node n2 ON n2.nid = o.nid 
    JOIN og_access_post a ON o.nid = a.nid
    JOIN content_type_group c ON n.vid = c.vid 
WHERE n.type = 'group'
    AND a.og_public = 1
    AND c.field_tyyppi_value != 'type1'

しかし、エラーが発生しています。

SQL構文にエラーがあります。'FROM n.nid、n.title、n2.nidの近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

私はいくつかの解決策を見つけましたが、それらを使用すると、テーブルと結合の順序を変更する必要があります。選択クエリのロジックは正しいので、更新を行うためにクエリのロジックをもう一度考えなければならないことは私には意味がありません。

クエリの構造を根本的に変更せずに、クエリを更新用に変換するにはどうすればよいですか?

4

4 に答える 4

2

UPDATE with join in MYSQLdoes not useFROM句、

update  og_access_post a 
        JOIN og_ancestry o ON o.nid = a.nid
        JOIN node n ON n.nid = o.group_nid
        JOIN node n2 ON n2.nid = o.nid
        JOIN content_type_group c ON n.vid = c.vid 
SET     a.og_public = 0 
WHERE   n.type = 'group' AND 
        a.og_public = 1 AND 
        c.field_tyyppi_value != 'type1'
于 2013-03-08T14:56:41.427 に答える
0
UPDATE og_access_post a
JOIN og_ancestry o 
    ON o.nid = a.nid
JOIN node n2 
    ON n2.nid = o.nid 
JOIN content_type_group c 
    ON n.vid = c.vid 
SET a.og_public = 0
WHERE n.type = 'group' 
    AND a.og_public = 1 
    AND c.field_tyyppi_value != 'type1'
于 2013-03-08T14:57:48.753 に答える
0

次のようなことをする必要があります

 update tableA set someColumn = 
        (SELECT someColumn 
            FROM tableA a
            where id=x
         )
于 2013-03-08T14:57:58.247 に答える
0

これを行う1つの方法は次のとおりです。

UPDATE og_access_post a SET og_public = 0 
WHERE a.{PRIMARY_KEY} IN (SELECT a.{PRIMARY_KEY} FROM 
    node n JOIN og_ancestry o ON n.nid = o.group_nid
    JOIN node n2 ON n2.nid = o.nid 
    JOIN og_access_post a ON o.nid = a.nid
    JOIN content_type_group c ON n.vid = c.vid 
    WHERE n.type = 'group' AND 
    a.og_public = 1 AND c.field_tyyppi_value != 'type1')

主キーが何かわからなかったので、{PRIMARY_KEY} を使用しました。

于 2013-03-08T15:05:23.460 に答える