MySQL表UNION ISSUE

时间:2012-05-10 18:26:14

标签: mysql sql sql-server union

我正在尝试在MySQL中联合两个表,我正在使用的查询是:

SELECT qa_invoicesitems.item_code, qa_invoicesitems.item_unitprice,    qa_invoicesitems.item_subtotal, qa_invoicesitems.item_discount, 
qa_invoicesitems.item_total 
FROM qa_invoicesitems   
RIGHT JOIN qa_invoicesitems_returnlog USING (item_code) 
WHERE invoice_code = 17
UNION
SELECT qa_invoicesitems_returnlog.item_code, qa_invoicesitems_returnlog.item_unitprice, qa_invoicesitems_returnlog.item_subtotal, 
qa_invoicesitems_returnlog.item_discount, qa_invoicesitems_returnlog.item_total 
FROM qa_invoicesitems_returnlog 
LEFT JOIN qa_invoicesitems USING (item_code) 
WHERE returnlog_code = 9

但我无法看到理想的结果。

图形示例.. enter image description here

任何人都知道我怎么能得到这个结果?
  注意: qa_invoicesitems_returnlog替换数据。

代码:1234,1585,23取自(qa_invoicesitems_returnlog),因为它们存在于两个表中,其余的只是简单显示。 enter image description here

2 个答案:

答案 0 :(得分:1)

你为什么使用UNION?我认为以下内容等同于您的查询:

SELECT qa_invoicesitems.item_code, qa_invoicesitems.item_unitprice,
       qa_invoicesitems.item_subtotal, qa_invoicesitems.item_discount,
       qa_invoicesitems.item_total
FROM qa_invoicesitems RIGHT JOIN
     qa_invoicesitems_returnlog
     USING (item_code)
WHERE invoice_code = 15 or returnlogcode = 8

LEFT和RIGHT联接正在做同样的事情,因为表格是相反的。

答案 1 :(得分:1)

根据您的评论&你的形象,我想说你想要的:

  • 表2中qa_invoicesitems_returnlog = 9
  • 的所有行
  • 表1中invoice_code = 17的所有行,除了那些已经存在于表2输出中的行item_id

所以,把它写成一个工会,给你:

SELECT qa_invoicesitems_returnlog.item_code as item_code, 
       qa_invoicesitems_returnlog.item_unitprice as item_unitprice,
       qa_invoicesitems_returnlog.item_subtotal as item_subtotal,         
       qa_invoicesitems_returnlog.item_discount as item_discount, 
       qa_invoicesitems_returnlog.item_total as item_total 
FROM qa_invoicesitems_returnlog
WHERE qa_invoicesitems_returnlog.returnlog_code = 9
UNION
SELECT qa_invoicesitems.item_code as item_code, 
       qa_invoicesitems.item_unitprice as item_unitprice,
       qa_invoicesitems.item_subtotal as item_subtotal,         
       qa_invoicesitems.item_discount as item_discount, 
       qa_invoicesitems.item_total as item_total 
 FROM qa_invoicesitems   
 WHERE qa_invoicesitems.invoice_code = 17
   AND NOT EXISTS (SELECT * FROM qa_invoicesitems_returnlog qir2
                   WHERE qir2.returnlog_code = 9 
                      and qir2.item_code = qa_invoicesitems.item_code)

密钥是NOT EXISTS子句,它排除了表1(qa_invoiceitems)的结果,这些结果已经存在于表2的输出中并且具有匹配的item_code