0

MYSQLには2つのテーブルがあります。

Encounters  
+----+--------+------------+
| Id | GameId | LocationId |
+----+--------+------------+
| 1  | 5      |     10     |
| 2  | 5      |     12     |
| 3  | 5      |     45     |
+----+--------+------------+
EncounterCards  
+----+-------------+--------+
| Id | EncounterId | CardId |
+----+-------------+--------+
|  6 | 1           | 26     |
|  7 | 2           |  5     |
|  8 | 3           |  5     |
+----+-------------+--------+

EncounterCards2つのテーブルを結合し、テーブル内のすべてのレコードを削除しようとしていますGameId = 5GameId内部結合を実行すると、テーブル内の列を検索しているため、これを実行できないようですがEncounterCards、Encountersテーブル内にのみ存在します。

したがって、このユースケースでは、EncounterCardsテーブルからすべてのレコードが削除されます。

これが私の質問です:

`$query = "DELETE FROM EncounterCards INNER JOIN Encounters ON Encounters.Id = EncounterCards.EncounterId WHERE Encounters.GameId = {$game_id}";`
4

3 に答える 3

3

を使用することINNER JOINがあなたのケースでそれほど重要でない場合は、以下を使用することもできます。

DELETE FROM EncounterCards
WHERE EncounterId IN (
    SELECT id FROM Encounters
    WHERE GameId = {game_id_to_filter}
);
于 2012-12-24T05:47:59.637 に答える
0

このクエリを試してください:

DELETE EncounterCards 
FROM EncounterCards INNER JOIN Encounters 
ON Encounters.Id = EncounterCards.EncounterId 
WHERE Encounters.GameId = {$game_id}

FROMキーワードの前にテーブル名が追加されました。複数テーブルのDELETE構文を参照してください。

于 2012-12-24T05:43:02.080 に答える
0

レコードを削除する場所を指定する必要があります。この場合、キーワードのALIAS前に前を追加しました。FROM

DELETE  a
FROM    EncounterCards a 
        INNER JOIN Encounters b
            ON a.EncounterID = b.ID
WHERE   b.GameID = 5
于 2012-12-24T05:43:12.873 に答える