2012-05-13 32 views
1

現金支払いと同じ日付の取引を選択する必要があります。 の支払いは1つしかありません(結果セットから14を省略する必要があります) 正しい結果は12と13のみです。2つ目のテーブルでcount = 1のテーブルから選択してください

Table2       Table1 
num | date | data | total  num | payment | date 
12  xy  abc 2.5  12  cash  xy 
13  xy  cbc 2.1  13  cash  xy 
14  xy  acc 2.3  14  visa  xy 
19  xy  def 2.0  14  cash  xy 
27  xy  fgh 1.3  19  visa  xy 
           27  mc  xy 

このようなものは、結果セットでは14になりますが、14は省略してください。 (tombomによる)正しい答えをsumarizeする

SELECT num, data 
FROM Table2 
WHERE num IN 
(
SELECT num FROM `Table1` 
WHERE payment = 'cash' 
GROUP BY `num` 
HAVING (COUNT(`num`) = 1 ) 
)   

SELECT t2.num, t2.data 
FROM Table1 as t1 
INNER JOIN Table2 as t2 ON t1.num = t2.num 
AND t1.date = 'xy' 
GROUP BY t1.num 
HAVING GROUP_CONCAT(t1.payment) = 'cash' 

ありがとう!

答えて

1

申し訳ありませんが、私は完全にあなたの質問に誤解しました。それはどのように動作するのですか:

SELECT 
* 
FROM 
Table1 t1 
INNER JOIN Table2 t2 ON t1.num = t2.num AND t1.date = t2.date 
GROUP BY t1.num 
HAVING GROUP_CONCAT(t1.payment) = 'cash' 
+0

何とか私はまだ2行の結果を取得します。この場合、私はまだnum 14になります。なぜなら、支払いは「現金」は他の支払いなしですでに結果になっているからです。 – phpJs

+0

@phpJames私の答えを編集し、更新されたクエリで試してみてください。 – fancyPants

+0

私はまだ2回の支払いで行を取得します。 私は今のところ日付を省略することができます簡略化 – phpJs

関連する問題