以下是我的数据库的架构。我迫切需要一个查询。已经工作了好几天但没有得到正确的结果。
TABLE: CUSTOMERINFORMATION
FIELDS: CUSTID, ACTOPTIONID,VAT,MINIMUMDOCT
TABLE: ONLINEORDERS
FIELDS: CUSTID, TOTALQUANTITY
TABLE: OFFLINEORDERS
FIELDS: CUSTID, TOTALQUANTITY
TABLE: ACTOPTS
FIELDS: ACTOPTIONID,ACTNAME
输出就像这样: TEMPORARY TABLE:CUSTID,ACTOPTIONID,TOTALONLINEQ,TOTALOFFLINEQ,ACTNAME
我需要将所有上述表和提到的字段组合到ONE TABLE中。 我们还需要确保返回NULL行;意味着UNION ALL适用于以上所有。
有人可以帮帮我吗?我已经花了好几天试图解决它,但不知何故无法获得正确的结果集。
这是为了创建一个数据导出实用程序,其中所有上述内容都将导出到另一个表中。但是,如果表格中没有与其他人相匹配的记录,我们需要确保不排除任何记录。
谢谢!!!!!
EDITED
以下是我的查询
SELECT table1.*, table2.*, table3.*
FROM (SELECT ao.actname,
ci.custid,
ci.actoptionid,
ci.minimumdoct,
ci.vat
FROM customerinformation ci, actoptions ao
WHERE ci.actoptionid = ao.actoptionid) table1
LEFT JOIN (SELECT custid, totalquantity, FROM onlineorders) table2
ON table1.custid = table2.custid
LEFT JOIN (SELECT custid FROM offlineorders) table3
ON table2.custid = table3.custid
但是,上面的内容不会返回RIGHT表格中的行。我想从桌子右边返回ROWS,为此我想我需要在所有这些上使用UNION。我该怎么做?
答案 0 :(得分:1)
SELECT
*
FROM
`CUSTOMERINFORMATION`
LEFT OUTER JOIN
`ONLINEORDERS` ON (`CUSTID`)
LEFT OUTER JOIN
`OFFLINEORDERS` ON (`CUSTID`)
LEFT OUTER JOIN
`OFFLINEORDERS` ON (`ACTOPTS`)
答案 1 :(得分:0)
你想要这个吗?
SELECT CI.CUSTID,
CI.VAT,
CI.MINIMUMDOCT,
ONL.TOTALQUANTITY as ONLINE_TOTALQUANTITY,
OFF.TOTALQUANTITY as OFFLINE_TOTALQUANTITY,
A.ACTNAME
FROM CUSTOMERINFORMATION CI
LEFT JOIN ACTOPTS A
ON CI.ACTOPTIONID = A.ACTOPTIONID
LEFT JOIN ONLINEORDERS ONL
ON CI.CUSTID = ONL.CUSTID
LEFT JOIN OFFLINEORDERS OFF
ON CI.CUSTID = OFF.CUSTID
答案 2 :(得分:0)
试试这个:
SELECT CI.CUSTID, CI.ACTOPTIONID, O.TOTALQUANTITY TOTALONLINEQ,
O1.TOTALQUANTITY TOTALOFFLINEQ, A.ACTNAME,
(O.TOTALQUANTITY + O1.TOTALQUANTITY) TotalQuantity
FROM CUSTOMERINFORMATION CI
INNER JOIN ACTOPTS A ON CI.ACTOPTIONID = A.ACTOPTIONID
LEFT JOIN (SELECT * FROM (SELECT CUSTID, TOTALQUANTITY FROM ONLINEORDERS ORDER BY DATE DESC) ASs A GROUP BY CUSTID) O ON CI.CUSTID = O.CUSTID
LEFT JOIN (SELECT * FROM (SELECT CUSTID, TOTALQUANTITY FROM OFFLINEORDERS ORDER BY DATE DESC) ASs A GROUP BY CUSTID) O1 ON CI.CUSTID = O1.CUSTID;
答案 3 :(得分:0)
如果您希望FULL JOIN
或LEFT
表
RIGHT
作为旁注,UNION
命令加入两个SELECT
语句,这些语句在当前表单中没有。如果您想使用UNION
,则应将语句重新排序为SELECT ... UNION SELECT ...