2013-02-22 58 views
1

我在構建選擇查詢時遇到問題。MySQL子查詢,需要幫助構造選擇語句

我有一個表,我已經在下面的簡化版本中顯示。列的數量比我所展示的數量多得多,但我已經省略了與此查詢無關的那些列。

ID ReceiptNo TransactionType 
-------------------------------- 
1 | 2SJ1532 | SALE 
2 | 8UG7825 | SALE 
3 | 0619373 | SALE 
4 | 8UG7825 | RFND 
5 |   | TEST 

我想只選擇有一個交易類型「SALE」,其中ReceiptNo對於選擇的行也出現在與交易類型RFND一排的那些行。

所以在上面的例子中,我想選擇第2行。因爲它具有交易類型SALE ,並且其ReceiptNo也出現在交易類型爲RFND的行中。

我有以下查詢來選擇所有的銷售類型的交易類型,但我想我需要一個子查詢使選擇工作如上所述。如果任何人都可以提供幫助,那會很棒。

SELECT * FROM $table_name WHERE RecieptNo IS NOT NULL AND TRIM(RecieptNo) <> '' AND TransactionType = 'SALE' 

回答

1

試試這個:

SELECT * 
FROM $table_name 
WHERE RecieptNo IN(SELECT RecieptNo 
        FROM tablename 
        WHERE TransactionType IN('Sale', 'RFND') 
        GROUP BY RecieptNo 
        HAVING COUNT(DISTINCT TransactionType) = 2); 

這將確保所選擇的RecieptNo兼得交易類型SaleRFND

1
SELECT * 
FROM $table_name X1 
WHERE X1.TransactionType = 'SALE' 
AND EXISTS (
SELECT X2.ReceiptNo 
FROM $table_name X2 
WHERE X1.ReceiptNo=X2.ReceiptNo 
AND X2.TransactionType = 'RFND' 
) 
1
SELECT t.* 
FROM your_table t 
JOIN your_table t2 ON t2.TransactionType = 'RFND' AND t2.ReceiptNo=t.ReceiptNo 
GROUP BY t.ID