0
  1. リストアイテム

2つのテーブルを結合して、一意の値を持つ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;

いつもお世話になっております。

4

1 に答える 1

1

これは答えではなく、単なる質問/コメントです:

データベース スキーマの詳細を知らなくても、group-by 句に間違ったテーブルを使用しているだけなのではないかと思います。

「inv_mast」テーブルに一意の「item_id」のみが含まれている場合、その特定のテーブルから 1 を超えるカウントを取得することはありません。

代わりに、「inv_bin」テーブルの ID を当てにしてみてください。

SELECT item_id 
FROM inv_bin
GROUP BY item_id HAVING COUNT(item_id) > 1
于 2013-02-15T19:51:16.030 に答える