2013-02-22 73 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