1

現金支払いと同じ日付のトランザクションを選択する必要がありますが、支払いが1回しかないトランザクションのみを選択する必要があります(したがって、num 14は結果セットから除外する必要があります)したがって、正しい結果は12と13のみです。

    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  

このようなものは結果セットに num 14 を与えますが、14 は省略されるべきです。

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

正解を要約するには ( tombom による):

 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'

ありがとう!

4

1 に答える 1

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'
于 2012-05-13T21:43:04.523 に答える