2012-05-13 50 views
1

我需要選擇具有現金付款和相同日期的交易,但僅限於只有一筆付款的交易 (因此,結果集中應省略num14) 所以正確的結果只有12和13。從第二個表中的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。

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

要sumarize正確答案(由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' 

謝謝!

回答

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

以某種方式與您的選擇我仍然得到兩行的結果。在這種情況下,我仍然得到第14名。是不是因爲付款:'現金'已經在沒有任何其他付款的結果? – phpJs

+0

@phpJames編輯我的答案,嘗試更新後的查詢。 – fancyPants

+0

我仍然收到兩筆付款的行 - 從WHERE更改爲AND後。 爲了簡化我們現在可以省略日期 – phpJs

相關問題