如何将这两个查询语句合并为一个查询语句

时间:2011-10-17 12:32:05

标签: mysql sql

  1.  SELECT *  FROM instalmentsdetails WHERE instalmentName='Third Installment'AND studentFeeId='1'
  2.  select max(`receiptNo`)as `receiptNo` FROM instalmentsdetails 

表安装细节

instalmentsDetailsId
studentFeeId
receiptNo
instalmentName
amount
dueDate
fineAmt
waivedAmt
scholarShip
grandTotal
status

有点困惑。如何将这两个查询语句合并为一个查询语句

P.S:一个语句检查条件,另一个语句检查该表中的最大receiveNo 我想在一个查询中使用这两个值

3 个答案:

答案 0 :(得分:4)

这是你想要的吗?

SELECT max(`receiptNo`) as `receiptNo`  
FROM instalmentsdetails 
WHERE instalmentName='Third Installment' AND studentFeeId='1'

更新:怎么样:

SELECT * 
FROM instalmentsdetails as inds
INNER JOIN (
    SELECT max(`receiptNo`) as `maxreceiptNo` 
    FROM instalmentsdetails
) as maxt
WHERE inds.instalmentName='Third Installment' AND inds.studentFeeId='1'

这会将过滤器应用于表格,然后添加一个额外的列(最大receiptNo

答案 1 :(得分:2)

假设目标是获得:

  1. 具有特定instalmentsdetailsinstalmentName
  2. studentFeeId列表
  3. 全球最高
  4. SELECT *, 0 AS receiptNo FROM instalmentsdetails WHERE instalmentName='Third Installment'AND studentFeeId='1' 
    UNION
    select *, max(`receiptNo`) as `receiptNo` FROM instalmentsdetails
    

    更新

    显然,OP只想将单独的查询结果合并为一行。在那种情况下:

    SELECT 
       *,
       (SELECT max(`receiptNo`) FROM instalmentsdetails) AS maxReceiptNo 
    FROM instalmentsdetails WHERE instalmentName='Third Installment'AND studentFeeId='1' 
    

答案 2 :(得分:0)

从所有的阅读来看,马特是正确的,但也许我可以帮助解释他在做什么......

查询的第一部分(来自InstalmentsDetails WHERE YourCondition)将获得符合条件的所有记录。

然后,通过对第二个查询执行JOIN(从...中选择max('receiptNo')而没有where子句)将始终返回最大收据的单行单列,而不考虑任何条件。< / p>

这会产生隐含的笛卡尔结果。使用第二个表中的每个记录加入第一个表中的所有内容。由于没有显式连接条件,因此每行将获得与返回列相同的“max()”值。并且由于select max()调用中只有一条记录,因此您不必担心重复。

现在,如果您希望在相同条件下获得最大收据,则只需将相同的条件复制到select max()查询部分。