我有一个MySQL查询,用于搜索列值属于非常大的集合的行:
SELECT * FROM table
WHERE col IN (someVal1, someVal2, someVal2, ...);
和someVal1, someVal2, someVal3, ...
的集合包含数千个条目。这使得查询非常难以阅读,因为该行占用了太多空间。有没有更好的方法来检查列值是否在此集合中而不将整个集合直接写入查询?
答案 0 :(得分:1)
我建议创建一个包含其中值的单独表格,然后您可以加入该表格。
这将使您的代码更易于维护,因为您可以轻松地添加和删除该表的条目而无需更改代码。
SELECT t.*
FROM table AS t
JOIN somevals AS v
ON t.col = v.val;
其中somevals是包含数千个值的表
您可能需要调整语法才能在MySQL上运行
你肯定应该在列表中的匹配列上有一个主键(somevals.val),并且很可能在你加入它的那个上添加一个索引(table.col)
答案 1 :(得分:0)
如果该集在数据库中,那么您可以使用select:
SELECT * FROM table WHERE col IN (SELECT col_name FROM table_name WHERE x=z);
答案 2 :(得分:0)
如发布的答案所示,通常不希望IN子句中包含大量值。我发现这篇早期帖子可能有助于找到问题的解决方案 - PreparedStatement IN clause alternatives?