我在构建选择查询时遇到问题。
我有一张桌子,我在下面的简化版本中展示过。有比我所示的列更多的列,但我已经省略了那些与此查询无关的列。
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'
答案 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
包含两种交易类型Sale
,RFND
。
答案 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