2017-04-11 105 views
0

我對SQL很陌生,試圖擴展到使用聯合,所以我不能100%確定是否有可能用聯合來獲得我想要的結果。SQL聯盟不按我想要的那樣工作?

我的代碼如下:

select workorder.wonum, null as description, null as quantity, null as unitcost, null as matlincost2, null as matlinprice, 
    labtrans.refwo, labtrans.startdate, labtrans.starttime, labtrans.finishtime, labtrans.regularhrs, labtrans.plusplineprice, labtrans.laborcode, labtrans.linecost as labline 
    from workorder 
    left join labtrans on labtrans.refwo=workorder.wonum and labtrans.siteid=workorder.siteid 
    where workorder.wonum='10192' 
    union 
    select matusetrans.refwo, matusetrans.description, matusetrans.quantity, matusetrans.unitcost, matusetrans.linecost as matlincost2, matusetrans.plusplineprice as matlinprice, 
    null as refwo, null as startdate, null as starttime, null as finishtime, null as regularhrs, null as plusplistprice, null as laborcode, null as labline 
    from matusetrans 
    where matusetrans.refwo='10192' 
    ; 

我的結果如下: enter image description here

正如你可以看到它把結果到4分個人的記錄,但我想上的結果只有2條記錄是合理的。

這可以使用聯合來完成嗎? 我試過一個聯合而不是一個聯盟,但它反正帶來了4條記錄。

+2

聽起來像你必須使用'加入'而不是'聯合' – Jens

+0

添加一些示例表格數據和預期結果 - 以及格式化文本! – jarlh

+0

這很好,謝謝 - 剛剛被告知這很好,因爲它是爲了我在做什麼 – Karen

回答

1

您的工會會產生結果。 你必須看到你的空值:

select workorder.wonum, **null as description**, null as quantity, null as unitcost, null as matlincost2, null as matlinprice, 
labtrans.refwo, labtrans.startdate, labtrans.starttime, labtrans.finishtime, labtrans.regularhrs, labtrans.plusplineprice, labtrans.laborcode, labtrans.linecost as labline 
from workorder 
left join labtrans on labtrans.refwo=workorder.wonum and labtrans.siteid=workorder.siteid 
where workorder.wonum='10192' 

聯盟的第一部分,返回描述(3,4行)空。

select matusetrans.refwo, matusetrans.description, matusetrans.quantity, matusetrans.unitcost, matusetrans.linecost as matlincost2, matusetrans.plusplineprice as matlinprice, 
**null as refwo**, null as startdate, null as starttime, null as finishtime, null as regularhrs, null as plusplistprice, null as laborcode, null as labline 
from matusetrans 
where matusetrans.refwo='10192' 

回報refwo空行1和2

聯盟工作全部選擇從選擇的結果,並添加其他選擇:不組數據,只會增加。

如果你有,POR例如, 選擇具有5行 聯盟 3行

返回一個包含8行選擇選擇。

也許你可以使用連接,而不是@jens所說的聯合,或者使用聯合後的組,或者使用不同的所選字段,你必須分析你需要什麼。