2011-12-15 62 views
0

在我的查询中,我需要为我的搜索返回不同的字段。但是,即使没有,txt_note字段也会返回信息。SQL查询 - 没有返回正确的数据

SELECT DISTINCT T_ORDER_DETAIL.TXT_ORDER_NUMBER, 
       T_ORDER_DETAIL.CUSTOMER_PRODUCT_ID, 
       T_VENDOR.VENDOR_ID, 
       T_CUSTOMER_ACCOUNT.CUSTOMER_ID, 
       T_EMPLOYEE.TXT_EMAIL, 
       T_ORDER_ASSIGNMENT.TXT_NOTE 
FROM T_VENDOR_EMPLOYEE 
     INNER JOIN T_VENDOR WITH(nolock) 
       ON T_VENDOR_EMPLOYEE.VENDOR_ID = T_VENDOR.VENDOR_ID 
     INNER JOIN T_CUSTOMER_ACCOUNT WITH(nolock) 
        INNER JOIN T_ORDER_DETAIL WITH(nolock) 
          INNER JOIN T_CUSTOMER_PRODUCT WITH(nolock) 
            ON T_ORDER_DETAIL.CUSTOMER_PRODUCT_ID = 
             T_CUSTOMER_PRODUCT.CUSTOMER_PRODUCT_ID 
          ON T_CUSTOMER_ACCOUNT.CUSTOMER_ACCOUNT_ID = 
          T_CUSTOMER_PRODUCT.CUSTOMER_ACCOUNT_ID 
       ON T_VENDOR_EMPLOYEE.VENDOR_EMPLOYEE_ID = 
        T_ORDER_DETAIL.VENDOR_EMPLOYEE_ID 
     INNER JOIN T_EMPLOYEE WITH(nolock) 
       ON T_VENDOR_EMPLOYEE.EMPLOYEE_ID = T_EMPLOYEE.EMPLOYEE_ID 
     INNER JOIN T_ORDER_DETAIL_REJECTION_REASON WITH(nolock) 
       ON T_ORDER_DETAIL.ORDER_DETAIL_ID = 
        T_ORDER_DETAIL_REJECTION_REASON.ORDER_DETAIL_ID 
     INNER JOIN T_ORDER_ASSIGNMENT WITH(nolock) 
       ON T_VENDOR_EMPLOYEE.VENDOR_EMPLOYEE_ID = 
        T_ORDER_ASSIGNMENT.VENDOR_EMPLOYEE_ID 
WHERE T_ORDER_ASSIGNMENT.INT_ACCEPTED = 4 
     AND T_ORDER_ASSIGNMENT.TXT_NOTE <> '' 

即使它返回信息,当您查看该字段为空时的实际顺序。

txt_Order_Number Customer_Product_ID vendor_ID customer_id txt_email txt_Note 
260247648 555 134242 650 [email protected] Out of office 
260498186 2783 134242 429 [email protected] Out of office 
261108453b 1485 134242 206 [email protected] Out of office 
261240252b 4429 134242 206 [email protected] Out of office 
270158583b 4429 134242 206 [email protected] Out of office 
270877727 3190 134242 724 [email protected] Out of office 
271239690b 4817 134242 486 [email protected] Out of office 
280162866b 5378 134242 721 [email protected] Out of office 
280968017b 1485 134242 206 [email protected] Out of office 
290702640 9361 134242 120 [email protected] Out of office 
291294922-50 9972 134242 977 [email protected] Out of office 
300453305-25 3648 134242 206 [email protected] Out of office 
301297011-50 1922 134242 206 [email protected] Out of office 

只有一个txt_not实际上已经不在办公室里,剩下的都是空白的。

任何帮助,非常感谢。

感谢

+1

大概在数据没有做什么你觉得它在做什么的情况下。返回t_Vendor_Employee.Vendor_Employee_ID列,然后查看t_Order_Assignment中的值以确保数据的正确性。另外,除非你有充分的理由这样做,否则不要使用`(with nolock)`。 – Eric 2011-12-15 16:15:26

+0

我按照你的建议完成了任务,其中只有一个任务没有办公室文本。我也必须使用(无锁),因为人的必须一次访问数据库。谢谢回复。 – Daren 2011-12-15 16:33:52

回答

0

我会尝试简化查询,尽可能少的内连接开始。即:

SELECT * 
FROM t_Vendor_Employee 
INNER JOIN t_Order_Assignment ON t_Vendor_Employee.vendor_employee_id = t_Order_Assignment.vendor_employee_id 
WHERE t_Order_Assignment.int_Accepted = 4 and t_Order_Assignment.txt_Note <> '' 

如果这给预期的结果,增加更多的内部连接,直到你得到你的错误 - 再看看数据,看看你是否能找出原因。


另外,你是否知道你使用WITH(NOLOCK)可能导致你错过提交的行?

http://blogs.msdn.com/sqlcat/archive/2007/02/01/previously-committed-rows-might-be-missed-if-nolock-hint-is-used.aspx

1

贵t_Order_Assignment表列Order_Detail_ID?如果是的话,在最后加入时将它添加到ON条件