Mysql SQL查询--未返回正确的数据
在我的查询中,我需要为搜索返回不同的字段。但是,即使没有信息,txt_注释字段也会返回信息Mysql SQL查询--未返回正确的数据,mysql,sql,sql-server-2008,Mysql,Sql,Sql Server 2008,在我的查询中,我需要为搜索返回不同的字段。但是,即使没有信息,txt_注释字段也会返回信息 SELECT DISTINCT T_ORDER_DETAIL.TXT_ORDER_NUMBER, T_ORDER_DETAIL.CUSTOMER_PRODUCT_ID, T_VENDOR.VENDOR_ID, T_CUSTOMER_ACCOUNT.CUSTOMER_ID,
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_实际上没有离开办公室,其余的都是空白
非常感谢您的帮助
谢谢您的t\u订单\u分配表列订单\u详细信息\u ID?如果是,将其添加到上次联接中的ON条件中我将尝试简化查询,从尽可能少的内部联接开始。即:
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可能会导致丢失提交的行
可能是这样一种情况,即数据没有做您认为它正在做的事情。返回t_Vendor_Employee.Vendor_Employee_ID列,然后在t_Order_赋值中查找该值,以确保数据正确。另外,除非你有很好的理由,否则不要使用nolock。我按照你的建议做了,只有一个作业有办公室外的文本,其余的没有。我还必须使用无锁,因为很多人必须一次访问数据库。谢谢你的回复。你为什么要同时标记sql server和mysql?我很确定nolock没有像你想象的那样做。你希望看到那些没有消息的订单的空白消息吗?您的WHERE子句特别排除了它们,因此您可能会遇到一些问题。另外,您加入了t_Order_Detail_Rejection_Reason,但对其不做任何处理-您是否希望所有行都有一个拒绝,这就是含义?我建议您使用表别名来缩短语句的可读性。如果您有足够的控制权,我也会去掉t_uu表和其他前缀,它们毫无价值。为什么int_Accepted是4?你有四个接受级别?t_是因为我们有几个表分配,t_代表info table NOT ask。我将这些表连接起来,看起来它们什么都没做,因为它们需要搜索表以找到相邻的int说明符。我排除了没有拒绝原因的项目,因为这意味着项目不会被拒绝。公司政策禁止使用别名“对不起”。t_Order_Assignment.int_Accepted有4个级别:保留、接受、拒绝和撤回。谢谢+1-同意。至少,他没有足够的“唯一性”列用于获取不同订单的不同消息。
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 <> ''