MySQL子查询,需要帮助构建Select语句

时间:2013-02-22 09:29:41

标签: php mysql sql select subquery

我在构建选择查询时遇到问题。

我有一张桌子,我在下面的简化版本中展示过。有比我所示的列更多的列,但我已经省略了那些与此查询无关的列。

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

我想只选择那些事务类型为“SALE”的行,其中所选行的ReceiptNo也出现在事务类型为RFND的行中。

因此,在上面的示例中,我想要选择第2行。因为它具有事务类型SALE 并且它的ReceiptNo也出现在事务类型为RFND的行中。

我有以下查询来选择所有SALE类型的事务类型,但我认为我需要一个子查询来使选择工作如上所述。如果有人能提供帮助那就太棒了。

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

3 个答案:

答案 0 :(得分: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 :(得分: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'
)

答案 2 :(得分:1)

SELECT t.*
FROM your_table t
JOIN your_table t2 ON t2.TransactionType = 'RFND' AND t2.ReceiptNo=t.ReceiptNo
GROUP BY t.ID