SQL 查询存在并计算子查询中的许多字段
SQL query with exists and count for many fields in subquery
我有这个查询:
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 vrsio,whbcode,bukrs,belnr,buzei,
werks,locat,matnr,bwtar,orgn, COUNT( * )
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.
出现错误,我在子查询中不能有超过 1 个字段。
我知道我可以对所有条目进行 2 次查询。但我正在寻找是否有可能在 1 个查询中只包含双倍、三倍等记录。
这可能吗?
有一个 EXISTS
子查询来限定您想要 select 的行。它不会向结果集中添加行或列。
将子查询的 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.
我有这个查询:
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 vrsio,whbcode,bukrs,belnr,buzei,
werks,locat,matnr,bwtar,orgn, COUNT( * )
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.
出现错误,我在子查询中不能有超过 1 个字段。
我知道我可以对所有条目进行 2 次查询。但我正在寻找是否有可能在 1 个查询中只包含双倍、三倍等记录。
这可能吗?
有一个 EXISTS
子查询来限定您想要 select 的行。它不会向结果集中添加行或列。
将子查询的 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.