存在的SQL查询并计数子查询中的许多字段

问题描述

我有这个查询

  page = params[:page].to_i
  per_page = 8
  starting_offset = 3
  offset = starting_offset + ((page - 1) * per_page)

  @looks = Look.search query,where: conditions,order: { created_at: :desc },page: page,per_page: per_page,offset: offset

一个错误,我在子查询中不能有超过1个字段。

我知道我可以对所有条目进行2个查询。但是我正在寻找是否有可能在1个查询中仅包含double,triple等记录。

这可能吗?

解决方法

在那里有一个EXISTS子查询来限定您要选择的行。它不会在结果集中添加行或列。

将子查询的SELECT子句中的列列表缩小为任意一个列,甚至是文字(例如SELECT 1),您都将得到重复项:>

SELECT *
  FROM j_1gvl_ml AS jml
  WHERE sptag IN @s_sptag AND
        bukrs = @p_bukrs AND
        werks IN @s_werks AND
        matnr IN @s_matnr AND
        tract IN @s_tract AND
        erdat IN @s_erdat AND
        repid = @p_repid AND
        EXISTS ( SELECT belnr
                  FROM j_1gvl_ml
                  WHERE vrsio = jml~vrsio AND
                        sptag = jml~sptag AND
                        whbcode = jml~whbcode AND
                        bukrs = jml~bukrs AND
                        belnr = jml~belnr AND
                        buzei = jml~buzei AND
                        werks = jml~werks AND
                        locat = jml~locat AND
                        matnr = jml~matnr AND
                        bwtar = jml~bwtar AND
                        orgn = jml~orgn
                  GROUP BY vrsio,whbcode,bukrs,belnr,buzei,werks,locat,matnr,bwtar,orgn
                  HAVING COUNT( * ) > 1  )
    INTO TABLE @itj_1gvl_ml.