SQL - MYSQL 一个查询接收不同列值的设置限制
Posted
技术标签:
【中文标题】SQL - MYSQL 一个查询接收不同列值的设置限制【英文标题】:SQL - MYSQL One query recieving set limit on different column values 【发布时间】:2017-09-11 20:57:39 【问题描述】:假设我有一个包含一组不同列的表(offcourse),
例子:
Table
id
col1 INTEGER(1), // 0 || 1
col2 // --||--
col3 // --||--
col4 // --||--
是否有可能,在 1 个查询中选择 col1=1 的 4 行,然后选择 col2=1 的 4 行,然后选择 col3=1 的 4 行等。我想你明白我的意思。
到目前为止,我所做的是进行 4 个不同的查询或进行一个查询,然后执行一个(col1 = 1 OR col2=1 OR... 等)。
这可行,但如果我将结果限制为 16,那么我可能会得到 15 行 col1=1 和可能 1 行 col2=1 然后 col3,col4 - 没有结果。
亲爱的小伙伴们;有没有办法在 1 个查询中做到这一点(我认为没有)
【问题讨论】:
你可以尝试使用union
子句。 Here
这种问题有时是设计不佳的症状
您好!是的,我同意这一点。问题不存在开始。客户需求和快速修复的集成解决了这样的结构。然而,我正在考虑将查询结果保存到会话中,这样它就不会在每个请求上都经历所有这些事情。感谢您的回复
【参考方案1】:
Select * from table where col1=1 limit 4
Union
Select * from table where col2=1 limit 4
Union
Select * from table where col3=1 limit 4
Union
Select * from table where col4=1 limit 4
这将为您提供一个最多 16 条记录的结果。如果某个特定条件的行数少于 4 行,您将获得更少的行数。重复项将被删除,导致少于 16 行。不是不同的行。
如果对于单行 col1=1 and col2=1
,那么如果您使用 union all
,它可能会返回两次,但对于大型数据集,只有 union
会更慢
【讨论】:
是的 :) 很好的解决方案。我了解成本。非常感谢你。我会试试这个并测试速度。也许 4 个不同的独立查询更快。这取决于。【参考方案2】:我认为您正在寻找 UNION ALL
构造。你可以简单地写
SELECT * FROM tab WHERE col1 = 1
UNION ALL
SELECT * FROM tab WHERE col2 = 2
UNION ALL
SELECT * FROM tab WHERE col3 = 3
等等。请注意,结果中的行可能会重复(如果它们满足条件中的更多条件)。
【讨论】:
@HugoDelsing 的答案更好,因为它包含 LIMIT 是的,这有点问题,但如果我们扩展查询,它可能会起作用。谢谢。 我会将此标记为解决问题,但正如@JacquesAmar 所说,Hugos 的答案更接近一点,不是因为限制条款,而是因为联盟解释以上是关于SQL - MYSQL 一个查询接收不同列值的设置限制的主要内容,如果未能解决你的问题,请参考以下文章