2012-01-24 24 views
0

私はMySQLで初めてです。MySql Select Query - WHERE句からエラーを取得する

SELECT 
    receive_item.RECEIPT_ID, 
    receive_item.ITEM_ID, 
    (receive_item.QTY - delivery_item.QTY) AS QtyRemained 
FROM receive_item 
INNER JOIN delivery_item 
ON receive_item.ITEM_ID = delivery_item.ITEM_ID 
AND receive_item.RECEIPT_ID = delivery_item.RECEIVE_ID 

これは私がQTYRemainedの値がこの

RECEIPT_ID ITEM_ID QTYRemained 
    3   3   1 

のようなものではない0 ある行のみ私を見せたい

RECEIPT_ID ITEM_ID QTYRemained 
    1   1   0 
    2   2   0 
    3   3   1 
    4   4   0 
    5   5   0 

上記のクエリからの結果であり、上記の選択クエリの最後に "From QTYRemained!= 0"を追加したときにエラーが発生しました。 誰かがなぜ動作していないのか教えていただけますか?

+1

エラーメッセージは便利です。あなたの質問の一部として投稿する必要があります – Phil

+1

Philが言っていたことを追加するには、クエリが無効であるような実際のエラーメッセージが表示されていますか?それは問題だから。 – bowlerae

+0

WHERE句を忘れてしまった。あなたのコードにWHERE句が表示されません。 – itachi

答えて

1

私は古いスティック・イン・ザ・泥だとせずにHAVINGを使用することを拒否しているためGROUP BY句、代替ソリューションはこちら

SELECT 
    ri.RECEIPT_ID, 
    ri.ITEM_ID, 
    (ri.QTY - di.QTY) AS QtyRemained 
FROM receive_item ri 
INNER JOIN delivery_item di 
ON ri.ITEM_ID = di.ITEM_ID 
AND ri.RECEIPT_ID = di.RECEIVE_ID 
WHERE ri.QTY > di.QTY 

かなり簡単です

+0

ありがとう、フィル –

2

は非常に

SELECT 
    receive_item.RECEIPT_ID, 
    receive_item.ITEM_ID, 
    (receive_item.QTY - delivery_item.QTY) AS QtyRemained 
FROM receive_item 
INNER JOIN delivery_item 
ON receive_item.ITEM_ID = delivery_item.ITEM_ID 
AND receive_item.RECEIPT_ID = delivery_item.RECEIVE_ID 
WHERE QtyRemained > 0 
+1

"QtyRemained"エイリアスは使用できません –

2

利用having代わりのwhere ...そう

WHERE QtyRemained > 0 

を末尾に追加します。

SELECT 
    receive_item.RECEIPT_ID, 
    receive_item.ITEM_ID, 
    (receive_item.QTY - delivery_item.QTY) AS QtyRemained 
FROM receive_item 
INNER JOIN delivery_item 
ON receive_item.ITEM_ID = delivery_item.ITEM_ID 
AND receive_item.RECEIPT_ID = delivery_item.RECEIVE_ID 
having QtyRemained > 0 

か、以下のように行うことができます。

SELECT 
    receive_item.RECEIPT_ID, 
    receive_item.ITEM_ID, 
    (receive_item.QTY - delivery_item.QTY) AS QtyRemained 
FROM receive_item 
INNER JOIN delivery_item 
ON receive_item.ITEM_ID = delivery_item.ITEM_ID 
AND receive_item.RECEIPT_ID = delivery_item.RECEIVE_ID 
where (receive_item.QTY - delivery_item.QTY) > 0 
+0

男性はいません...常に真実ではありません。エイリアスに問題があります。私たちはどこで使うことはできません。私は試してその作業 –

+0

@ Phil Teezは右のようだ... – Bajrang

+0

私はより多くのビュー(インラインビュー)としてクエリを作成する傾向があるだろう。 'HAVING'は列を集約する条件を適用する場合にのみ実際に*です* – Phil

1

試してください: -

SELECT 
    receive_item.RECEIPT_ID, 
    receive_item.ITEM_ID, 
    (receive_item.QTY - delivery_item.QTY) AS QtyRemained 
FROM receive_item 
INNER JOIN delivery_item 
ON receive_item.ITEM_ID = delivery_item.ITEM_ID 
AND receive_item.RECEIPT_ID = delivery_item.RECEIVE_ID 
group by receive_item.RECEIPT_ID 
Having QtyRemained > 0 
+0

"QtyRemained"エイリアスはどこにありますか –

+1

どこで "どこ?"私はどこにも追加していない。 – Bajrang

関連する問題