1

2012 年より前に作成され、ホテル ID '1' に属し、関連テーブル 'taskinstance' に 1 つのレコードしかないテーブル 'people' のレコードを削除する必要があります。テーブルは次のように関連付けられています: people.id = taskinstance.idClient. 次の構文エラーが発生します。

DELETE people FROM taskinstance people 
INNER JOIN 
    (SELECT * 
     FROM taskinstance
    WHERE substring(people.dateCreated,1,4) < 2012 and people.idHotel = '1'  
     GROUP BY taskinstance.idClient 
     HAVING COUNT(*) = 1) taskinstance 
ON people.id = taskinstance.idClient

レコードを表示したいだけの場合は、次のように機能します。

SELECT *
FROM people
INNER JOIN taskinstance ON people.id = taskinstance.idClient
WHERE substring(people.dateCreated,1,4) < 2012 and people.idHotel = '1'
GROUP BY people.id
HAVING COUNT(1) = 1

ご協力いただきありがとうございます。

4

1 に答える 1

0

次のようなことを試してください:

 DELETE FROM people WHERE people.id IN 
 (SELECT people.id
 FROM people
 INNER JOIN taskinstance ON people.id = taskinstance.idClient
 WHERE substring(people.dateCreated,1,4) < 2012 and people.idHotel = '1'
 GROUP BY people.id
 HAVING COUNT(*) = 1)

編集:自分のデータベースでテストしましたが、これは DELETE 句と同じテーブルを WHERE 句に持つために拒否されました。

またはこれ:

 DELETE people FROM people
 INNER JOIN (
    SELECT people.id
    FROM people
    INNER JOIN taskinstance ON people.id = taskinstance.idClient
    WHERE substring(people.dateCreated,1,4) < 2012 and people.idHotel = '1'
    GROUP BY taskinstance.idClient
    HAVING COUNT(*) = 1
    ) p
 ON p.id = people.id

編集:私は自分のデータベースで(自分のテーブルだけで)これとほぼ同じクエリをテストしましたが、クエリに構文エラーはありませんでした。

"... for the right syntax to use near 'something something something' on line X." 問題を追跡できるように、構文エラーの全文を投稿してくださいsomething something。たとえば、次のように表示されている場合、"near '' on line 6"その 1 を囲む単一引用符はほぼ確実にエスケープされていません。

于 2013-02-28T23:49:48.690 に答える