我有3个表invoice_hd
,invoice_dt
,Account_Mast
。我想使用条件invoice_hd
与invoice_dt
加入invoice_hd.ID=invoice_dt.INVOICE_ID
,以便从AccountCode
表中获取Account_Mast
。
但在将表格invoice_dt
加入Account_Mast
之前,我想采用top 1
invoice_dt
,因为其结果数据包含多条记录。为此我在下面创建了两个选择查询:
select IH.ID,
IH.CODE,
IH.DATE,
C.CCODE
FROM invoice_hd IH
LEFT JOIN Currencies C ON C.ID = IH.CURRENCY_ID
WHERE APPROVAL_FLAG='FL' and IH.code = 'LI/15'
SELECT TOP 1 SID.ID,SID.INVOICE_ID,AM.CODE AS ACCOUNT_CODE
FROM invoice_dt SID
LEFT JOIN Account_Mast AM ON BAM.ID = SID.ACCOUNT_ID
WHERE SID.INVOICE_ID = 1028
现在我想将这两个选择查询与条件invoice_hd.ID=invoice_dt.INVOICE_ID
组合在一起。有没有办法这样做?
答案 0 :(得分:1)
那么你可以将查询用作子查询并像表一样加入它,例如:
SELECT
/* It's better if you avoid use * in the select */
A.ID,
A.CODE,
A.DATE,
A.CCODE,
B.ID,
B.INVOICE_ID,
B.ACCOUNT_CODE
FROM (
/* Here your first query */
SELECT
IH.ID,
IH.CODE,
IH.DATE,
C.CCODE
FROM invoice_hd IH
LEFT JOIN Currencies C ON C.ID = IH.CURRENCY_ID
WHERE APPROVAL_FLAG='FL' and IH.code = 'LI/15'
) AS A
INNER JOIN (
/* Then your second one */
SELECT TOP 1
SID.ID,
SID.INVOICE_ID,
AM.CODE AS ACCOUNT_CODE
FROM invoice_dt SID
LEFT JOIN Account_Mast AM ON BAM.ID = SID.ACCOUNT_ID
WHERE SID.INVOICE_ID = 1028
) AS B
/* And for last your condition of join */
ON A.ID = B.INVOICE_ID
答案 1 :(得分:1)
如果你说细节线无关紧要(这很奇怪),那么你可以这样做:
SELECT IH.ID, IH.CODE, IH.DATE, C.CCODE, AM.CODE AS ACCOUNT_CODE
FROM invoice_hd IH
INNER JOIN (
SELECT INVOICE_ID, MAX(ACCOUNT_ID) AS ACCOUNT_ID
FROM invoice_dt
GROUP BY INVOICE_ID) AS DT ON invoice_hd.ID = DT.INVOICE_ID
LEFT JOIN Account_Mast AM ON AM.ID = dt.ACCOUNT_ID
LEFT JOIN Currencies C ON C.ID = IH.CURRENCY_ID
WHERE APPROVAL_FLAG='FL'
AND IH.code = 'LI/15'
答案 2 :(得分:0)
这可以让您了解如何实现这一目标。
SELECT *
FROM
(select * from table1) q1 LEFT JOIN
(select * from table2) q2 on q1.id=q2.id