現金支払いと同じ日付のトランザクションを選択する必要がありますが、支払いが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'
ありがとう!