簡潔にするために、次のようなテーブルがあるとしましょう。
item_name item_location item_price
PROMO_A local 5
B local 7
PROMO_A global 8
ここで、私が行っているのは、item_locationが「local」であるか、「item_name
contains」という単語PROMO
がitem_location
「local」ではないすべてのレコードを選択することです。これは、私のSQLクエリでは簡単に見えます。
SELECT * FROM mytable WHERE item_location='local' OR (item_name like 'PROMO%' AND item_location != 'local');
さて、上記で設定したサンプルデータのように、2つの同一item_name
のデータを取得する可能性があるので、後者のクエリが追加されないようにこのクエリを修正するにはどうすればよいでしょうか。レコードを調べて重複を削除するPHPプログラムを作成することでこれを修正できます(item_location =='global'を持つ重複(同じitem_nameを持つもの)を削除する必要があります)が、これが可能かどうか疑問に思っていましたSQLだけを使用して行われますか?上記のクエリの一時テーブルを作成してから、個別のitem_nameレコードをクエリすることを考えていましたが、その場合、item_location'global'のレコードを削除するにはどうすればよいですか?
とにかく、どんな助けも大歓迎です。
編集:このためのSQLフィドルリンクを設定しました。
edit2:次のクエリでこれを機能させることができました:
SELECT * FROM mytable WHERE item_location ='local'
連合
SELECT * FROM mytable WHERE item_name LIKE'PROMO%' AND item_name NOT IN
(SELECT item_name from mytable WHERE item_location ='local')
そして、このためのSQLフィドルリンクはここにあります。
さて、これはもっとうまく処理できると思いますので、誰かがもっと良いアプローチをしてくれたら、あなたの考えを聞いてみたいと思います。