我正在尝试连接两个表,过滤掉具有唯一值的item_id,并显示任何值 item_id包含相同的值。我正在使用的SQL语句似乎只有一半工作,除了它返回我认为我有这个数字的所有内容,但我猜不是。
这句话可以解决所有问题。
--join two tables filtering out and item_id that has a unique value and displaying any
--item_id that contains the same value
SELECT inv_bin.bin, inv_bin.quantity, inv_bin.inv_bin_uid, inv_bin.inv_mast_uid,
inv_mast.inv_mast_uid,inv_mast.item_desc, inv_mast.item_id
FROM inv_bin left join inv_mast on inv_bin.inv_mast_uid = inv_mast.inv_mast_uid
WHERE inv_mast.item_id in ( SELECT item_id from inv_mast
GROUP BY item_id HAVING COUNT (item_id) >= 1 )
AND inv_bin.bin not like 'rec'
AND inv_bin.bin not like 'DEFBIN'
AND inv_bin.bin not like 'DEFAULTBIN'
ORDER BY inv_mast.item_id;
但是,如果我从 '='
中删除 Group By item_id Having COUNT (item_id) >= 1 )
,则查询不会返回任何内容。我知道我在item_id列中的数据是相同的:
bin item_id
07C-C15 002-09-121
Z07-OS 002-09-121
无论如何,有人可以告诉我,我在哪里出错了,在我看来,使用> 1将显示item_id中具有相同值的所有内容。
谢谢, 布雷特
bin quantity inv_bin_uid inv_mast_uid inv_mast_uid item_id
07C-C15 0 135 70 70 002-09-121
Z07-OS 10 130277 70 70 002-09-121
04C-B21 0 354 289 289 032-36-26
04C-B04 0 356 291 291 032-38-26
02A-B01 2 101 48 48 5-40050720L
Z29-SKID00 0 117 48 48 5-40050720L
这是产生所需结果的完成语句。
/*join two tables filtering out and item_id that has a unique value and displaying any
item_id that contains the same value */
SELECT inv_bin.bin, inv_bin.quantity, inv_bin.inv_bin_uid, inv_bin.inv_mast_uid,
inv_mast.item_desc, inv_mast.item_id
from inv_bin left join inv_mast on inv_bin.inv_mast_uid = inv_mast.inv_mast_uid
where inv_bin.inv_mast_uid in (
SELECT inv_mast_uid FROM inv_bin
WHERE inv_bin.bin NOT IN ('REC','DEFBIN','DEFAULTBIN')
GROUP BY inv_mast_uid HAVING COUNT(inv_mast_uid)>1 )
and inv_bin.bin not like 'rec'
and inv_bin.bin not like 'defbin'
and inv_bin.bin not like 'Defaulbin'
/*look up filtering out ids based on not like statements*/
ORDER BY inv_bin.inv_mast_uid;
再次感谢您的帮助。
答案 0 :(得分:1)
这不是答案,只是一个问题/评论:
在不知道有关您的数据库架构的任何更多详细信息的情况下,我想知道您是否只是使用了错误的表来进行分组索引?
如果您的“inv_mast”表只包含唯一的“item_id”,那么您永远不会从该特定表中获得高于1的计数。
请尝试依靠“inv_bin”-table上的ID:
SELECT item_id
FROM inv_bin
GROUP BY item_id HAVING COUNT(item_id) > 1