2012-10-15 96 views
1

我正在努力结合下面的Select Statements,我知道我可以作弊并添加一些虚假的列然后使用Union,但我想正确地做到这一点。 一旦我将他们加入,我将把这个陈述放入一个用于Word和CRM4的XML文件中。合并/加入SQL选择查询

SELECT BILLTO_NAME, 
     BILLTO_LINE1, 
     BILLTO_LINE2, 
     BILLTO_LINE3, 
     BILLTO_CITY, 
     BILLTO_COUNTRY, 
     BILLTO_POSTALCODE, 
     ORDERNUMBER, 
     REQUESTDELIVERYBY, 
     MODIFIEDON, 
     SHIPTO_NAME, 
     SHIPTO_LINE1, 
     SHIPTO_LINE2, 
     SHIPTO_LINE3, 
     SHIPTO_CITY, 
     SHIPTO_STATEORPROVINCE, 
     SHIPTO_COUNTRY, 
     SHIPTO_POSTALCODE, 
     CREATEDBY 
FROM SALESORDERBASE 



SELECT QUANTITY, 
     DESCRIPTION 
FROM SALESORDERDETAILBASE 

SELECT NEW_ORDERNOTES, 
     NEW_NOTES 
FROM SALESORDEREXTENSIONBASE 

它们都具有SalesOrderID的公共列,我需要在某处添加它。

回答

1

您可以在表上使用LEFT JOIN的OP:

SELECT ob.SalesOrderID 
     ob.BILLTO_NAME, 
     ob.BILLTO_LINE1, 
     ob.BILLTO_LINE2, 
     ob.BILLTO_LINE3, 
     ob.BILLTO_CITY, 
     ob.BILLTO_COUNTRY, 
     ob.BILLTO_POSTALCODE, 
     ob.ORDERNUMBER, 
     ob.REQUESTDELIVERYBY, 
     ob.MODIFIEDON, 
     ob.SHIPTO_NAME, 
     ob.SHIPTO_LINE1, 
     ob.SHIPTO_LINE2, 
     ob.SHIPTO_LINE3, 
     ob.SHIPTO_CITY, 
     ob.SHIPTO_STATEORPROVINCE, 
     ob.SHIPTO_COUNTRY, 
     ob.SHIPTO_POSTALCODE, 
     ob.CREATEDBY, 
     od.QUANTITY, 
     od.DESCRIPTION, 
     oe.NEW_ORDERNOTES, 
     oe.NEW_NOTES 
FROM SALESORDERBASE ob 
LEFT JOIN SALESORDERDETAILBASE od 
    on ob.SalesOrderID = od.SalesOrderID 
LEFT JOIN SALESORDEREXTENSIONBASE oe 
    on ob.SalesOrderID = oe.SalesOrderID 
+0

谢谢你们,我想这是一个加入我需要的,但不能肯定的是,我对SalesOrderBase和SalesOrderDetailBase都有一个Description列的事实存在一些小问题,我想我可以拿出一个。有没有人对我可以阅读的SQL书有任何建议? Ry –

+0

@RyanKeen你需要做的就是为这些字段提供一个别名。那么你应该没有问题从两列中返回数据。 :) – Taryn

+0

非常感谢您的帮助。 –

0

假设标识的关系被称为ID在所有三个表的列,你可以这样做:

SELECT sob.BILLTO_NAME, 
    sob.BILLTO_LINE1, 
    sob.BILLTO_LINE2, 
    sob.BILLTO_LINE3, 
    sob.BILLTO_CITY, 
    sob.BILLTO_COUNTRY, 
    sob.BILLTO_POSTALCODE, 
    sob.ORDERNUMBER, 
    sob.REQUESTDELIVERYBY, 
    sob.MODIFIEDON, 
    sob.SHIPTO_NAME, 
    sob.SHIPTO_LINE1, 
    sob.SHIPTO_LINE2, 
    sob.SHIPTO_LINE3, 
    sob.SHIPTO_CITY, 
    sob.SHIPTO_STATEORPROVINCE, 
    sob.SHIPTO_COUNTRY, 
    sob.SHIPTO_POSTALCODE, 
    sob.CREATEDBY, 
    sodb.QUANTITY, 
    sodb.DESCRIPTION, 
    soeb.NEW_ORDERNOTES, 
    soeb.NEW_NOTES 
From SalesOrderBase sob 
JOIN SalesOrderDetailBase sodb 
    ON sob.id = sodb.SalesOrderID 
JOIN SalesOrderExtensionBase soeb 
    ON sob.id = soeb.SalesOrderID 

你能想到的加盟为行砰一起并排侧,而UNIONing被砰的一起排在另一排之上。 UNION要求列是相同的,JOIN要求每行之间有某种关系。

编辑 - 提供更多的细节

+0

感谢您的帮助:-) –