書き直されたタイトルは次のとおりです: データ クリーニングに適した MySQL クエリ ステートメント
P粉413704245
2023-09-03 18:23:21
<p>テーブルが 3 つあります。 1 つのテーブルは移動距離テーブルです。
<pre class="brush:php;toolbar:false;">テーブルルートを作成する
(
スラット整数、
slng int、
dlat int、
DLNG 整数、
距離整数
);</pre>
<p>テーブルはサイトテーブルです</p>
<pre class="brush:php;toolbar:false;">テーブル サイトを作成する
(
ID 整数、
名前 varchar(100)、
緯度整数、
lng int
);</pre>
<p>技術者用のテーブルもあります</p>
<pre class="brush:php;toolbar:false;">テーブル fse を作成
(
ID 整数、
名前 varchar(100)、
緯度整数、
lng int
);</pre>
<p>移動距離テーブルは、Google API リクエストを通じて動的に入力されます。したがって、新しい停留所や新しい技術者がいる場合、すべての新しい移動距離が Google を通じてリクエストされ、ルート テーブルに保存されます。 </p>
<p>もちろん、顧客や技術者が退職することも考えられます。この場合、距離テーブルのエントリは、使用されなくなった場合でもデータベースに残ります。 </p>
<p>テーブル内のこれらの未使用の行を削除したいと考えています。そこで、このフィドル</p>のコメントに書かれているように、サイト/技術者テーブル内の「存在しない」緯度と経度の組み合わせをすべて削除できるクエリを探しています。
<p>https://www.db-fiddle.com/f/mwF1iyZ7nn8rnDcE8Wstch/0</p>
<p>このクエリを自分で書くこともできますが、唯一の解決策は非常に多くのサブクエリを使用することです。しかし、より効率的な方法があるかどうか疑問に思っています。ここの SQL 専門家が助けてくれることを願っています。 </p>
このクエリは機能するはずです:
リーリーテーブル
sites
およびfse
からすべてのレコードを選択し、サブクエリでレコードが見つからないルート テーブルの行を削除します。in
は 1 つの列しか処理できないため、2 列の concat を使用する必要があります。|
は値を区切るためにのみ使用されます。DB-フィドル