2017-04-20 100 views
0

我有一個包含一些書目記錄的mysql數據庫表。它的格式有點像這樣:當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等],但無法安裝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

太棒了。謝謝。它確實創造了一個奇怪的第一行,似乎將所有條形碼連接在一個單元格中,但忽略了它完美的工作原理。 再次感謝。對於任何人在未來的諮詢 - 這個解決方案告訴我最短的記錄是什麼。它沒有通過查詢嫌疑人名單來實現,但它確實很快,並且消除了查閱該名單的需要。 – Jack

+0

檢查'中央'以查看'連接'是否在其中。 –

2

無需通過循環只需用IN運營商和供應有你所有的條碼值一樣

where barcode in (1.3K list of barcodes) 

有使用腳本語言或多種方法可以形成INLIST ..的。否則,創建一個temporary表。使用條形碼,這些列表填充它,並從該臨時表中選擇

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

非常感謝您對這個幫助。我按照描述給出了一個結果,雖然它給了我所有行的總字符數,但它不會產生我正在查找的逐行結果。 我嘗試: ''' 選擇條形碼,總和(長度(field_content)) 從中央 其中條形碼中(選擇候選名單條形碼) ; ''' 和結果是 ''' 條形碼[1] 604724 '''' – Jack

+0

@Jack,什麼是'短名單'?你在那裏如何拉取這些價值? – Rahul

+0

候選名單是包含1.3k值的另一個表。 LOAD DATA LOW_PRIORITY LOCAL INFILE'H:\\ shortlist.csv'REPLACE INTO TABLE sierra_import'''shortlist' FIELDS OPENALLALLY ENCLOSED BY'\ n'LINES TERMINATED BY'\ r \ n 'IGNORE 1 LINES('barcode');'''' – Jack