0

对于给定的loanID,如果该loanID 已经存在于table1 中,但不在table2 中,我想选择所有属于该loanID 的项目名称,否则如果该loanID 存在于两个表(table1 和table2)中并且在这种情况下还需要balanceDue>0选择 itemnames 属于该 loanid。

表格1:

loanID, itemId, itemName, itemQty, balanceQty

表2:

loanID, itemId, GRN, itemName, balanceDue, qty

样本数据

情况1

表格1

loanID  itemId     itemName    
LN1     IT1        Item001        
LN1     IT2        Item002        
LN1     IT3        Item003        
LN2     IT1        Item001        
LN2     IT2        Item002        
LN2     IT3        Item003        
LN3     IT1        Item001        
LN3     IT2        Item002        
LN3     IT3        Item003        

表 2

loanID  itemId  itemName  balanceDue
LN1     IT1     Item001   0
LN1     IT2     Item002   0
LN1     IT3     Item003   0
LN2     IT1     Item001   0
LN2     IT2     Item002   0
LN2     IT3     Item003   1000

如果我选择 LN3 作为 LoanID,由于 LN3 不在表 2 中,我需要获取属于 LN3 的所有项目名称 LN3 的结果必须是

item001, item002, item003

案例2

如果我在表 2 中选择 LN3 作为 LoanID,如果任何项目的 balanceDue>0 属于 LN3,则必须生成这些项目名称。

LN3 的结果必须是

item001, item003

如果我选择 LN2 作为loanID,则 LN2 的结果必须是

item001

表格1

loanID  itemId  itemName    
LN1 IT1 Item001        
LN1 IT2 Item002        
LN1 IT3 Item003        
LN2 IT1 Item001        
LN2 IT2 Item002        
LN2 IT3 Item003        
LN3 IT1 Item001        
LN3 IT2 Item002        
LN3 IT3 Item003        

表 2

loanID  itemId  itemName    balanceDue
LN1 IT1 Item001        0
LN1 IT2 Item002        0
LN1 IT3 Item003        0
LN2 IT1 Item001        300
LN2 IT2 Item002        0
LN2 IT3 Item003        1000
LN3 IT1 Item001        500
LN3 IT2 Item002        0
LN3 IT3 Item003        0    
4

3 回答 3

2

尝试

SELECT
  table1.loanID,
  GROUP_CONCAT( COALESCE( table2.itemName,table1.itemName ) )
FROM
  table1 
  LEFT JOIN table2 ON table1.loanID = table2.loanID
WHERE
  table2.loanID IS NULL OR balanceDue>0
GROUP BY
  table1.loanID
于 2013-04-17T18:32:24.387 回答
1
SELECT
  table1.loanID,
  COALESCE(table2.itemName, table1.itemName)
FROM
  table1 LEFT JOIN table2 ON table1.loanID = table2.loanID
  AND balanceDue>0

在此处查看小提琴。如果loanID 存在于table2 中,但没有balanceDue>0 的行,这将返回table1.itemName。

编辑

我想你可能需要这个查询:

SELECT
  table1.itemName
FROM
  table1 LEFT JOIN table2
  ON table1.loanID = table2.loanID
  AND table1.itemId = table2.itemId                   
WHERE
  table1.loanID='LN3' AND
  COALESCE(table2.balanceDue>0, TRUE)

或这个:

SELECT DISTINCT
  COALESCE(table2.itemName, table1.itemName)
FROM
  table1 LEFT JOIN table2
  ON table1.loanID = table2.loanID                   
WHERE
  table1.loanID='LN3' AND
  COALESCE(table2.balanceDue>0, TRUE)

在这里拉小提琴。

于 2013-04-17T18:28:18.430 回答
0
SELECT T1.loanId, T1.itemName
FROM table1 AS T1
WHERE T1.loanId IN 
    (SELECT loanId FROM table2 WHERE loanId=T1.loadId AND balanceDue>0)
AND T1.loanId=?
于 2013-04-17T18:44:30.867 回答