2017-04-20 2 views
0

私はいくつかの書誌レコードを含むmysql dbテーブルを持っています。WHERE条件がリストから来るときのSQLループクエリ

field content |field title |barcode 
Black Beauty |Title  |9781235842 
James Joyce |Author  |9781452585 

可能なフィールドタイトルは数十種類あります。

各レコードは効果的に複数の行に分散され、レコードはバーコードを共有する結合された行です。

私は、どの項目に短いレコードがあるか見たいと思っています。

私は、特定のバーコードのための作業クエリがあります。

select barcode, sum(length(field_content)) from central where barcode = 420908032337 ;

をそして私は1.3K容疑者バーコードのリストを持っています。このリストをループしてSQLクエリを実行する方法はありますか?

私は仕事用マシンで、HeidiSQL、git bash [grep etcを含む]にアクセスできますが、スクリプト用にphp、rubyなどをインストールすることはできません。

答えて

1
select barcode, 
     sum(length(field_content)) AS rec_len 
    from central 
    GROUP BY barcode 
    ORDER BY rec_len -- display the shortest first 
    LIMIT 50; -- if you want to see just 50 
+0

これは素晴らしいことです。ありがとう。 1つのセル内のすべてのバーコードを連結しているように見える奇妙な最初の行を作成しますが、完全に機能することは無視してください。 もう一度ありがとうございます。将来これについて相談する人には、このソリューションは最短記録が何であるかを教えてくれます。それは容疑者リストに相談することでそうしないが、それは本当に迅速であり、そのリストを調べる必要性を取り除く。 – Jack

+0

「中央」をチェックして、「連結」がその中にあるかどうかを確認します。 –

2

だけIN演算子を使用して、スクリプト言語またはいずれかを使用して...そのINLISTを形成することができる多くの方法があります

where barcode in (1.3K list of barcodes) 

のようにそこにすべてのあなたのバーコードの値を提供をループの必要はありません。それ以外の場合は、temporaryテーブルを作成します。バーコードのこれらのリストでそれを記入し、その一時テーブルからこの上のあなたの助けのための

where barcode in (select distinct barcodes from my_temp_table) 
+0

感謝を選択します。私は説明したようにそれを与え、それは私に私が探していた行ごとの結果を生成しないすべての行の合計文字カウントを与えている間。 私は試しました: '' ' 中央からの からバーコード、合計(長さ(field_content)) を選択してくださいどこのバーコード(ショートリストからバーコードを選択してください) ; '' ' 、結果は ' '' バーコード[1] 604724 '' ' – Jack

+0

@Jack、その' shortlist'は何ですか?あなたはその中のどのように値を引っ張ったのですか? – Rahul

+0

ショートリストは、1.3k値を含む別のテーブルです。テーブルを '' LOAD DATA LOW_PRIORITY LOCAL INFILE 'H:\\ shortlist.csv'に置き換えました。 'sierra_import'.shortlist'' \ n 'で終端されたフィールド' \ r \ n '1行を無視する( 'barcode');' '' – Jack