Mysql 从第二个表中计数=1的一个表和另外两个条件中进行选择

Mysql 从第二个表中计数=1的一个表和另外两个条件中进行选择,mysql,Mysql,我需要选择现金支付且日期相同的交易,但仅限于这些交易 只有一次付款(因此从resultset中应省略数字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

我需要选择现金支付且日期相同的交易,但仅限于这些交易 只有一次付款(因此从resultset中应省略数字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 
*
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'

对不起,我完全误解了你的问题。下面是它的工作原理:

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'

不知何故,通过您的选择,我仍然可以得到两行的结果。在这种情况下,我仍然得到num 14。不是因为付款:“现金”已经在结果中,没有任何其他付款吗?@phpJames编辑了我的答案,尝试使用更新的查询。在从何处更改到和之后,我仍然会收到两笔付款的行。为了简化,我们可以省略日期now@phpJames编辑了我的答案。这次我测试了一下,它成功了。一开始我误解了你的问题。我没有看到任何表达式只选择忽略现金支付和其他类型支付的行-必须是group_concat(?)。但是select按预期工作…不知何故,使用您的select,我仍然得到两行的结果。在这种情况下,我仍然得到num 14。不是因为付款:“现金”已经在结果中,没有任何其他付款吗?@phpJames编辑了我的答案,尝试使用更新的查询。在从何处更改到和之后,我仍然会收到两笔付款的行。为了简化,我们可以省略日期now@phpJames编辑了我的答案。这次我测试了一下,它成功了。一开始我误解了你的问题。我没有看到任何表达式只选择忽略现金支付和其他类型支付的行-必须是group_concat(?)。但是select按预期工作。。。