如果存在则从另一个表中选择数据,如果不显示null

时间:2014-11-22 17:01:14

标签: mysql sql

我有两张桌子。

发票

ID | Amount
-----------
1  | 123.54
2  | 553.46
3  | 431.34
4  | 321.31
5  | 983.12

贷记凭证

ID | invoice_ID | Amount
------------------------
1  | 3          | 25.50
2  | 95         | 65.69
3  | 51         | 42.50

我想从这两个表中得到这样的结果集

ID | Amount | Cr_memo
---------------------
1  | 123.54 |
2  | 553.46 |
3  | 431.34 | 25.50
4  | 321.31 |
5  | 983.12 |

我一直在搞乱连接而且整个早上都没有真正的运气。

这是我尝试过的最后一个查询,它从Credit Memo表中提取了所有内容......

SELECT A.ID, A.Amount FROM Invoices AS A
LEFT JOIN Credit_Memos AS B ON A.ID = B.invoice_ID

感谢任何帮助或指示。

3 个答案:

答案 0 :(得分:2)

您的查询可以正常工作。只需添加Credit_memo.Amount别名:

即可
SELECT Inv.ID,Inv.Amount,IFNULL(C.Amount,'') AS Cr_memo
FROM Invoices Inv LEFT JOIN
    Credit_Memos C ON Inv.ID=C.invoice_ID

结果:

ID  AMOUNT  CR_MEMO
1   124 
2   553 
3   431     25.50
4   321 
5   983 

请参阅SQL FIDDLE中的结果。

答案 1 :(得分:0)

您几乎得到答案Left Outer Join正是您所需要的,但您错过了从Cr_memo表中选择Credit_Memos。由于您不希望在Invoices_ID表格中没有Credit Memos时显示空值,请使用IFNULLNULL's设为空字符串

SELECT A.ID, A.Amount, IFNULL(B.Cr_memo,'') AS Cr_memo
FROM Invoices AS A
LEFT JOIN Credit_Memos AS B 
ON A.ID = B.invoice_ID

答案 2 :(得分:0)

LEFT JOIN关键字返回左表(table1)中的所有行,右表(table2)中的匹配行。当没有匹配时,结果在右侧为NULL。

  SELECT A.ID, A.Amount, IFNULL(B.amount,0) AS Cr_memo  FROM Invoices AS A
  LEFT JOIN Credit_Memos AS B ON A.ID = B.invoice_ID

这是关于左连接linkanother

的一些有用链接