2010-06-30 40 views
1
SELECT DISTINCT rt . d_rev_id , rt . d_rev_code , rt . d_reason , rt . d_rev_status , rt . d_apb , rt . d_cb , pt . d_partid , pt . d_part_no , pt . d_ab , pt . d_abd , pt . d_status , rt . d_part_name , rt . d_part_desc , rt . d_part_type , pnv . d_pn_val , pnv . d_pn_id , cfv . d_optionname , rt . d_projectid , rt . d_abd , rt . d_apbd 
FROM 
    ( 
     ( 
     design_parts pt 
     INNER JOIN design_part_number_val pnv 
     USING (d_partid) 
     INNER JOIN design_revision_temp rt 
     USING (d_partid) 
     ) 
    LEFT JOIN design_pn_custom_field_options cfv 
    ON d_optionvalue = d_pn_val 
    ) 
WHERE rt . d_projectid = 1 
AND 1 
GROUP BY d_rev_id 
UNION ALL 
SELECT DISTINCT dr . d_rev_id , dr . d_rev_code , dr . d_reason , dr . d_part_name , dr . d_apb , dr . d_cb , pt . d_partid , pt . d_part_no , pt . d_ab , pt . d_abd , pt . d_status , dr . d_part_name , dr . d_part_desc , dr . d_part_type , pnv . d_pn_val , pnv . d_pn_id , cfv . d_optionname , dr . d_projectid , dr . d_apbd , dr . d_cbd 
FROM 
    ( 
     ( 
     design_parts pt 
     INNER JOIN design_part_number_val pnv 
     USING (d_partid) 
     INNER JOIN design_revision dr 
     USING (d_partid) 
     ) 
    LEFT JOIN design_pn_custom_field_options cfv 
    ON d_optionvalue = d_pn_val 
    ) 
WHERE dr . d_projectid = 1 
AND 1 
GROUP BY d_partid 
ORDER BY `rt.d_abd` ASC 

由于我对所选字段进行了排序,因此此查询中出现了什么问题。我收到错误“#1054 - '订单子句'中的未知列'rt.d_abd''”。 请帮我联合查询中的排序错误

回答

0

尝试此查询:

(SELECT DISTINCT rt . d_rev_id , rt . d_rev_code , rt . d_reason , rt . d_rev_status , rt . d_apb , rt . d_cb , pt . d_partid , pt . d_part_no , pt . d_ab , pt . d_abd , pt . d_status , rt . d_part_name , rt . d_part_desc , rt . d_part_type , pnv . d_pn_val , pnv . d_pn_id , cfv . d_optionname , rt . d_projectid , rt . d_abd , rt . d_apbd 
FROM 
    design_parts pt 
    INNER JOIN design_part_number_val pnv 
    USING (d_partid) 
    INNER JOIN design_revision_temp rt 
    USING (d_partid) 
    LEFT JOIN design_pn_custom_field_options cfv 
    ON d_optionvalue = d_pn_val 
WHERE rt . d_projectid = 1 
GROUP BY d_rev_id) 
UNION ALL 
(SELECT DISTINCT dr . d_rev_id , dr . d_rev_code , dr . d_reason , dr . d_part_name , dr . d_apb , dr . d_cb , pt . d_partid , pt . d_part_no , pt . d_ab , pt . d_abd , pt . d_status , dr . d_part_name , dr . d_part_desc , dr . d_part_type , pnv . d_pn_val , pnv . d_pn_id , cfv . d_optionname , dr . d_projectid , dr . d_apbd , dr . d_cbd 
FROM 
    design_parts pt 
    INNER JOIN design_part_number_val pnv 
    USING (d_partid) 
    INNER JOIN design_revision dr 
    USING (d_partid) 
    LEFT JOIN design_pn_custom_field_options cfv 
    ON d_optionvalue = d_pn_val 
WHERE dr . d_projectid = 1 
GROUP BY d_partid) 
ORDER BY `d_abd` ASC 
+0

我得到这个错误消息什么是“全局ORDER子句”从一个SELECT中的表'design_revision'不能用在全局ORDER子句中 什么是“全局ORDER子句“?你能告诉我吗? – 2010-06-30 11:29:05

+0

全局顺序子句是(仅)ORDER BY存在的。这是全球性的,因为它适用于整个UNION(而不是单独选择每个选项)。 UNION结果没有名字,所以你可以使用ORDER BY d_abd。 – Konerak 2010-06-30 11:33:11

+0

好吧,但它说“d_abd在顺序子句是不明确的”那么我应该怎么做才能解决这个问题 – 2010-06-30 12:32:59

1

错误在于你在反引号之间加了tablename.columnname :MySQL将其解释为一个列名。

可以使用`tablename`.`columnname`或者根本不使用反引号。

+0

我试过,但它不工作,我使用别名表名。 – 2010-06-30 07:11:45

+0

它会给'\'rt \'。\'d_abd \''带来什么错误呢? – Konerak 2010-06-30 07:26:38

1
ORDER BY `rt.d_abd` ASC 

应该

ORDER BY `rt`.`d_abd` ASC 

ORDER BY rt.d_abd ASC 

EDITED 您可以使用单引号也行

ORDER BY 'rt.d_abd' ASC 

我想你没有使用正确的语法使用()正确

应该如下

(SELECT column1. column2 
FROM table1) 
UNION ALL 
(SELECT column3, column4 
FROM table2) 
ORDER BY column1 
+0

我试过这两种,但它不起作用。它仍然给出相同的错误 – 2010-06-30 07:28:10

+0

@parag: - 正确使用'('和')' – Salil 2010-06-30 07:36:01