当WHERE条件来自列表的SQL循环查询

问题描述:

我有一个包含一些书目记录的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等进行脚本编写。

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

检查'中央'以查看'连接'是否在其中。 –

无需通过循环只需用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