1

次のようなクエリがあります。

DELETE FROM rules_table
WHERE
    type1 = (
        SELECT type_id
        FROM types_table
        WHERE name = '<some_name>')
OR
    type2 = (
        SELECT type_id
        FROM types_table
        WHERE name = '<some_name>')

<some_name>どちらの場合も同じであることに注意してください

PHP スクリプトからクエリを送信しましたが、1 つのリクエストで type_is を選択し、結果を解析して削除リクエストを送信するよりも、単一のリクエストであることが望ましいです。

また、私の知る限り、同じSELECTステートメントを 2 回実行することも悪い考えです。

4

2 に答える 2

2

代わりにsubquery使用できますINNER JOIN

DELETE a
FROM rules_table a
     INNER JOIN types_table b
        ON (a.type1 =  b.type_id OR a.type2 =  b.type_id)
WHERE b.name = '<some_name>';
于 2012-08-16T07:13:42.650 に答える
2

試す

DELETE FROM rules_table
WHERE  (
         SELECT type_id
         FROM types_table
         WHERE name = '<some_name>'
       ) in (type1, type2)
于 2012-08-16T07:07:45.643 に答える