mysql问题: is there something like IN ALL query?

标签 mysql ruby-on-rails activerecord searchlogic

例如这个查询:

SELECT `variants`.* 
  FROM `variants` INNER JOIN `variant_attributes` 
    ON variant_attributes.variant_id = variants.id 
 WHERE (variant_attributes.id IN ('2','5'))

变体有_许多变体_属性

我真正想做的是找出哪个变体同时具有 ID = 2 和 5 的变体属性。这对 MySQL 来说可能吗?红利问题,是否有一种使用 Ruby on Rails 或 SearchLogic 可以快速完成此操作的方法?

解决方案

感谢 Quassnoi 提供的查询,效果非常好。

为了在 Rails 上使用,我使用了下面的 named_scope,我认为这对于初学者来说更容易理解。

基本上 named_scope 会返回 {:from => x, :conditions => y} 并且上面的行用于设置 y 变量。

  named_scope :with_variant_attribute_values, lambda { |values|
    conditions = ["(
            SELECT  COUNT(*)
            FROM    `variant_attributes`
            WHERE   variant_attributes.variant_id = variants.id
                    AND variant_attributes.value IN (#{values.collect { |value| "?" }.join ", "})
            ) = ?
    "]
    conditions = conditions + values + [values.length]
    {
    :from => 'variants', 
    :conditions => conditions
  }}

最佳答案

假设 variant_attributes (variant_id, id) 是唯一的:

SELECT  `variants`.*
FROM    `variants`
WHERE   (
        SELECT  COUNT(*)
        FROM    `variant_attributes`
        WHERE   variant_attributes.variant_id = variants.id
                AND variant_attributes.id IN ('2','5')
        ) = 2

关于mysql问题: is there something like IN ALL query?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2746273/

相关文章:

MYSQL 连接列而不分组

mysql - 我怎样才能加入空?

ruby-on-rails - #<#<Class :0x0 的未定义方法 'pathname'

php - ActiveRecord + CodeIgniter - 从查询返回单个值,而不是数组形式

ruby-on-rails - Rails,如何在 where 语句中使用 block

sql - ActiveRecord - 从每个组中选择第一条记录

mysql - Percona XtraBackup - 将数据库备份恢复到包含其他数据库的 MySQL 服务器中

mysql - 获取 INSERT ... SELECT ... ON DUPLICATE KEY UPDATE 的 "Records"和 "Duplicates"计数

ruby-on-rails - Mechanize 上传二进制数据

ruby-on-rails - 将多维数组的元素插入 Ruby 中的另一个数组