对于给定的loanID, 如果那个loanID已经存在于table1中,但不存在于table2中,我想选择属于该loanID的所有项目名 如果那个loanID存在于两个表(table1和table2)和balanceDue> 0中,那么在这种情况下还需要选择属于该loanid的itemnames。
表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
答案 0 :(得分: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
答案 1 :(得分:1)
SELECT
table1.loanID,
COALESCE(table2.itemName, table1.itemName)
FROM
table1 LEFT JOIN table2 ON table1.loanID = table2.loanID
AND balanceDue>0
请参阅小提琴here。如果表2中存在loanID,但没有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)
小提琴here。
答案 2 :(得分: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=?